From e47d33b222efd0d0ec4765175a324e04ea0a7e12 Mon Sep 17 00:00:00 2001 From: shenghui kevin Date: Sat, 21 Feb 2026 18:12:46 -0800 Subject: [PATCH 1/2] fix: sort glob results for deterministic load order across all callers Co-Authored-By: Claude Opus 4.6 --- packages/opencode/src/util/glob.ts | 6 ++++-- packages/opencode/test/util/glob.test.ts | 12 ++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/opencode/src/util/glob.ts b/packages/opencode/src/util/glob.ts index febf062daa47..d3544be7eb44 100644 --- a/packages/opencode/src/util/glob.ts +++ b/packages/opencode/src/util/glob.ts @@ -21,11 +21,13 @@ export namespace Glob { } export async function scan(pattern: string, options: Options = {}): Promise { - return glob(pattern, toGlobOptions(options)) as Promise + const results = (await glob(pattern, toGlobOptions(options))) as string[] + return results.sort() } export function scanSync(pattern: string, options: Options = {}): string[] { - return globSync(pattern, toGlobOptions(options)) as string[] + const results = globSync(pattern, toGlobOptions(options)) as string[] + return results.sort() } export function match(pattern: string, filepath: string): boolean { diff --git a/packages/opencode/test/util/glob.test.ts b/packages/opencode/test/util/glob.test.ts index ae1bcdcf82e0..b422d23f4d8f 100644 --- a/packages/opencode/test/util/glob.test.ts +++ b/packages/opencode/test/util/glob.test.ts @@ -14,7 +14,7 @@ describe("Glob", () => { const results = await Glob.scan("*.txt", { cwd: tmp.path }) - expect(results.sort()).toEqual(["a.txt", "b.txt"]) + expect(results).toEqual(["a.txt", "b.txt"]) }) test("returns absolute paths when absolute option is true", async () => { @@ -53,7 +53,7 @@ describe("Glob", () => { const results = await Glob.scan("*", { cwd: tmp.path, include: "all" }) - expect(results.sort()).toEqual(["file.txt", "subdir"]) + expect(results).toEqual(["file.txt", "subdir"]) }) test("handles nested patterns", async () => { @@ -93,7 +93,7 @@ describe("Glob", () => { const results = await Glob.scan("**/*.txt", { cwd: tmp.path, symlink: true }) - expect(results.sort()).toEqual(["linkdir/file.txt", "realdir/file.txt"]) + expect(results).toEqual(["linkdir/file.txt", "realdir/file.txt"]) }) test("includes dotfiles when dot option is true", async () => { @@ -103,7 +103,7 @@ describe("Glob", () => { const results = await Glob.scan("*", { cwd: tmp.path, dot: true }) - expect(results.sort()).toEqual([".hidden", "visible"]) + expect(results).toEqual([".hidden", "visible"]) }) test("excludes dotfiles when dot option is false", async () => { @@ -125,7 +125,7 @@ describe("Glob", () => { const results = Glob.scanSync("*.txt", { cwd: tmp.path }) - expect(results.sort()).toEqual(["a.txt", "b.txt"]) + expect(results).toEqual(["a.txt", "b.txt"]) }) test("respects options", async () => { @@ -135,7 +135,7 @@ describe("Glob", () => { const results = Glob.scanSync("*", { cwd: tmp.path, include: "all" }) - expect(results.sort()).toEqual(["file.txt", "subdir"]) + expect(results).toEqual(["file.txt", "subdir"]) }) }) From af6756a8021dde393a85f4fee699bdbaae3355c6 Mon Sep 17 00:00:00 2001 From: shenghui kevin Date: Sat, 21 Feb 2026 20:05:51 -0800 Subject: [PATCH 2/2] ci: retrigger typecheck