From 4e200f6b093e6a61582a3e73ac1fbdc4987da8b5 Mon Sep 17 00:00:00 2001 From: iamnbutler Date: Thu, 15 Oct 2026 03:04:32 -0400 Subject: [PATCH 1/2] fix(app): tell apart projects whose folders share a name Projects that would show the same label now add the fewest trailing parent folders that distinguish them (a GitHub project adds its owner), computed once over the full project list, and the picker shows each checkout's full path on hover. The picker, sidebar header, All Projects sections, palette groups, dashboard and setup dialogs all read the same label. Why: apps/app/src/projects.ts#function disambiguate | labels are computed over the full merged project list so every surface shows the same distinct name --- ...F4P375REE7-all-projects-and-project-vie.md | 6 +-- ...PSH2EAWHFCK-a-peer-answers-project-repo.md | 5 +- ...2DNWYT5040-labels-are-computed-over-the.md | 8 +++ ...XEHA0CP4BP-labels-are-computed-over-the.md | 8 +++ apps/app/src/app.tsx | 13 +++-- apps/app/src/dashboard.tsx | 10 ++-- apps/app/src/github.tsx | 2 +- apps/app/src/projects.ts | 54 ++++++++++++++++--- apps/app/src/setup-project.tsx | 4 +- docs/architecture.md | 4 +- .../session-sidebar/session-sidebar.tsx | 9 ++-- 11 files changed, 95 insertions(+), 28 deletions(-) create mode 100644 .lane/memory/apps/app/src/projects.ts/01M4Z60Y09MP3TBA2DNWYT5040-labels-are-computed-over-the.md create mode 100644 .lane/memory/apps/app/src/projects.ts/01M4Z60Y5ZWGMZ6EXEHA0CP4BP-labels-are-computed-over-the.md diff --git a/.lane/memory/apps/app/src/app.tsx/01M4YT6XB7NQ89E6F4P375REE7-all-projects-and-project-vie.md b/.lane/memory/apps/app/src/app.tsx/01M4YT6XB7NQ89E6F4P375REE7-all-projects-and-project-vie.md index 3e58f138..6e40cb62 100644 --- a/.lane/memory/apps/app/src/app.tsx/01M4YT6XB7NQ89E6F4P375REE7-all-projects-and-project-vie.md +++ b/.lane/memory/apps/app/src/app.tsx/01M4YT6XB7NQ89E6F4P375REE7-all-projects-and-project-vie.md @@ -4,9 +4,9 @@ anchor: function App created: 2026-10-15T03:38:04Z norm: '1' sig: 063d0f00fea02511 -body_hash: 726ff380a6ed89cc -raw_hash: c03dc81b6aead86a -vouched: 2026-10-15T04:38:31Z +body_hash: 0d7b1cb6c65605d5 +raw_hash: b2fe7bdf13815593 +vouched: 2026-10-15T07:04:36Z lines: 235-824 --- diff --git a/.lane/memory/apps/app/src/projects.ts/01M4YQHHKT4G697PSH2EAWHFCK-a-peer-answers-project-repo.md b/.lane/memory/apps/app/src/projects.ts/01M4YQHHKT4G697PSH2EAWHFCK-a-peer-answers-project-repo.md index 4178da17..4db65d31 100644 --- a/.lane/memory/apps/app/src/projects.ts/01M4YQHHKT4G697PSH2EAWHFCK-a-peer-answers-project-repo.md +++ b/.lane/memory/apps/app/src/projects.ts/01M4YQHHKT4G697PSH2EAWHFCK-a-peer-answers-project-repo.md @@ -4,8 +4,9 @@ anchor: function projects created: 2026-10-15T02:51:27Z norm: '1' sig: a2ec110fa31d81ee -body_hash: 98fe298db41971b4 -raw_hash: b3ec10e5a33485c2 +body_hash: 708f362a469da056 +raw_hash: ba42a00a04cb6a48 +vouched: 2026-10-15T07:04:36Z lines: 42-91 --- diff --git a/.lane/memory/apps/app/src/projects.ts/01M4Z60Y09MP3TBA2DNWYT5040-labels-are-computed-over-the.md b/.lane/memory/apps/app/src/projects.ts/01M4Z60Y09MP3TBA2DNWYT5040-labels-are-computed-over-the.md new file mode 100644 index 00000000..e7bd2885 --- /dev/null +++ b/.lane/memory/apps/app/src/projects.ts/01M4Z60Y09MP3TBA2DNWYT5040-labels-are-computed-over-the.md @@ -0,0 +1,8 @@ +--- +id: 01M4Z60Y09MP3TBA2DNWYT5040 +anchor: function disambiguate +created: 2026-10-15T07:04:31Z +norm: '1' +--- + +labels are computed over the whole project list after merging by identity: Git worktrees already join their main checkout and GitHub checkouts merge by repo, so only distinct projects can collide diff --git a/.lane/memory/apps/app/src/projects.ts/01M4Z60Y5ZWGMZ6EXEHA0CP4BP-labels-are-computed-over-the.md b/.lane/memory/apps/app/src/projects.ts/01M4Z60Y5ZWGMZ6EXEHA0CP4BP-labels-are-computed-over-the.md new file mode 100644 index 00000000..c1a7d524 --- /dev/null +++ b/.lane/memory/apps/app/src/projects.ts/01M4Z60Y5ZWGMZ6EXEHA0CP4BP-labels-are-computed-over-the.md @@ -0,0 +1,8 @@ +--- +id: 01M4Z60Y5ZWGMZ6EXEHA0CP4BP +anchor: function disambiguate +created: 2026-10-15T07:04:32Z +norm: '1' +--- + +labels are computed over the full merged project list so every surface shows the same distinct name diff --git a/apps/app/src/app.tsx b/apps/app/src/app.tsx index 66770f92..2a461194 100644 --- a/apps/app/src/app.tsx +++ b/apps/app/src/app.tsx @@ -52,6 +52,7 @@ import { label, projectId, projects, + title, } from "./projects"; import { Settings } from "./settings"; import { SetupProject } from "./setup-project"; @@ -345,6 +346,7 @@ export function App() { id: value.id, name: label(value, hello.host), org: value.repo?.split("/")[0] || "", + title: title(value, hello.host), })), ]; const { attention, pulse } = useAttention( @@ -470,6 +472,7 @@ export function App() { const target: AppProject = { ...value, id, + label: value.name, host: hello.host, reachable: true, hosts: new Set([hello.host]), @@ -616,7 +619,7 @@ export function App() { ? ( {allProjects ? "Choose a channel from any project" - : `Choose a channel in ${current.name}`} + : `Choose a channel in ${current.label}`} {allProjects && (

@@ -753,7 +756,7 @@ export function App() { )} {!allProjects && !local && (

- {current.name} is checked out on {[...current.hosts].join(", ")}.{" "} + {current.label} is checked out on {[...current.hosts].join(", ")}.{" "} {current.repo ? `Set it up on ${here} to start channels here.` : "Open a checkout on this host to start channels here."} @@ -762,7 +765,7 @@ export function App() { {!allProjects && needsGit && (

init(current.path)} /> @@ -797,7 +800,7 @@ export function App() { attention={attention} onChannel={select} onCreate={current && creatable && connected - ? { name: current.name, run: () => void create() } + ? { name: current.label, run: () => void create() } : undefined} /> {adding && setAdding(false)} />} diff --git a/apps/app/src/dashboard.tsx b/apps/app/src/dashboard.tsx index b833e4c5..243d9264 100644 --- a/apps/app/src/dashboard.tsx +++ b/apps/app/src/dashboard.tsx @@ -111,12 +111,12 @@ export function Dashboard( trigger={