From 0d4ec464f6e4156701b432b425af8b5f7369b78e Mon Sep 17 00:00:00 2001 From: iamnbutler Date: Mon, 19 Oct 2026 14:02:53 -0400 Subject: [PATCH 1/3] fix(host): untracked files don't block a move to a cloud workspace, and refusals name changed files Why: apps/host/src/compute.ts#function lanes | lane clones ignored files like node_modules into worktrees whose branch may not ignore them, so only tracked changes may block a move --- apps/app/src/move-channel.tsx | 2 +- apps/host/src/compute.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/app/src/move-channel.tsx b/apps/app/src/move-channel.tsx index 989b2d6..652f037 100644 --- a/apps/app/src/move-channel.tsx +++ b/apps/app/src/move-channel.tsx @@ -14,7 +14,7 @@ const OUTCOMES = { hosted: "The channel becomes a hosted channel there, with this host as its workspace. It keeps its chats, messages, and lanes.", cloud: - "Its tools then run in a container on the team's compute service, which starts from a fresh clone with the channel's pushed lanes. It keeps its chats and messages, and can't move back yet.", + "Its tools then run in a container on the team's compute service, which starts from a fresh clone with the channel's pushed lanes; untracked files stay on this Mac. It keeps its chats and messages, and can't move back yet.", }; type Props = { diff --git a/apps/host/src/compute.ts b/apps/host/src/compute.ts index 3002799..87a1aad 100644 --- a/apps/host/src/compute.ts +++ b/apps/host/src/compute.ts @@ -92,9 +92,17 @@ async function lanes(root: string, prefix: string): Promise { const unready: string[] = []; const ready: Lane[] = []; for (const lane of found) { + // lane clones the project's ignored files, such as node_modules, into worktrees whose branch may + // not ignore them, so untracked files can't block a move; they stay on this host. + const changed = lane.branch + ? (await output(lane.path, ["diff", "--name-only", "HEAD"])).split("\n").filter(Boolean) + : []; if (!lane.branch) unready.push(`${lane.name} (no branch)`); - else if (await output(lane.path, ["status", "--porcelain"])) { - unready.push(`${lane.name} (uncommitted changes)`); + else if (changed.length) { + const more = changed.length > 3 ? `, and ${changed.length - 3} more` : ""; + unready.push( + `${lane.name} (uncommitted changes to ${changed.slice(0, 3).join(", ")}${more})`, + ); } else if (pushed.get(lane.branch) !== lane.head) unready.push(`${lane.name} (not pushed)`); else { const base = (await git(root, ["config", "--get", `lane.${lane.branch}.base`])).stdout.trim(); From c1bb0f528e3f94654dcae01f52cc8c5f2b61e133 Mon Sep 17 00:00:00 2001 From: iamnbutler Date: Mon, 19 Oct 2026 14:03:00 -0400 Subject: [PATCH 2/3] chore: confirm lane note --- ...AHG0YFSH0H05S3Y0N16BKF-git-worktree-list-prints-rea.md | 5 +++-- ...AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md diff --git a/.lane/memory/apps/host/src/compute.ts/01M5AHG0YFSH0H05S3Y0N16BKF-git-worktree-list-prints-rea.md b/.lane/memory/apps/host/src/compute.ts/01M5AHG0YFSH0H05S3Y0N16BKF-git-worktree-list-prints-rea.md index 40781fc..0328e5c 100644 --- a/.lane/memory/apps/host/src/compute.ts/01M5AHG0YFSH0H05S3Y0N16BKF-git-worktree-list-prints-rea.md +++ b/.lane/memory/apps/host/src/compute.ts/01M5AHG0YFSH0H05S3Y0N16BKF-git-worktree-list-prints-rea.md @@ -4,8 +4,9 @@ anchor: function lanes created: 2026-10-19T16:56:39Z norm: '1' sig: a117f6b009a0a5ab -body_hash: 73bf0673747cc608 -raw_hash: deaa38044cf0d425 +body_hash: 608b9efe149e4af0 +raw_hash: eaf0bb12be123591 +vouched: 2026-10-19T18:03:00Z lines: 67-112 --- diff --git a/.lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md b/.lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md new file mode 100644 index 0000000..d522905 --- /dev/null +++ b/.lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md @@ -0,0 +1,8 @@ +--- +id: 01M5AN9A1YPT5XAP3TS3ACX5BT +anchor: function lanes +created: 2026-10-19T18:02:53Z +norm: '1' +--- + +lane clones ignored files like node_modules into worktrees whose branch may not ignore them, so only tracked changes may block a move From 8cc05c0bb9b8675bdacb3ef9cbcf30d74e8d21b3 Mon Sep 17 00:00:00 2001 From: iamnbutler Date: Mon, 19 Oct 2026 14:03:01 -0400 Subject: [PATCH 3/3] lane: sync move-untracked memory --- ...01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md b/.lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md index d522905..c501265 100644 --- a/.lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md +++ b/.lane/memory/apps/host/src/compute.ts/01M5AN9A1YPT5XAP3TS3ACX5BT-lane-clones-ignored-files-li.md @@ -3,6 +3,10 @@ id: 01M5AN9A1YPT5XAP3TS3ACX5BT anchor: function lanes created: 2026-10-19T18:02:53Z norm: '1' +sig: a117f6b009a0a5ab +body_hash: 608b9efe149e4af0 +raw_hash: eaf0bb12be123591 +lines: 67-120 --- lane clones ignored files like node_modules into worktrees whose branch may not ignore them, so only tracked changes may block a move