diff --git a/src/analyzers/fileLocationDrift.ts b/src/analyzers/fileLocationDrift.ts index a5ad84e..5eb6cf5 100644 --- a/src/analyzers/fileLocationDrift.ts +++ b/src/analyzers/fileLocationDrift.ts @@ -64,10 +64,15 @@ function rankFolders(files: RepoFile[]): string[] { } const highestCount = Math.max(...counts.values()); - return [...counts.entries()] + const topFolders = [...counts.entries()] .filter(([, count]) => count === highestCount) - .sort((a, b) => comparePaths(a[0], b[0])) - .map(([directory]) => directory); + .sort((a, b) => comparePaths(a[0], b[0])); + + if (topFolders.length !== 1) { + return []; + } + + return topFolders.map(([directory]) => directory); } function createFinding( diff --git a/tests/fileLocationDrift.test.ts b/tests/fileLocationDrift.test.ts index ed595d5..0230adc 100644 --- a/tests/fileLocationDrift.test.ts +++ b/tests/fileLocationDrift.test.ts @@ -55,6 +55,16 @@ describe("analyzeFileLocationDrift", () => { expect(findings).toEqual([]); }); + it("does not report when baseline category files are split across top folders", () => { + const findings = analyze([ + file("src/utils/request.ts", true), + file("src/lib/api/client.ts"), + file("src/services/fetcher.ts") + ]); + + expect(findings).toEqual([]); + }); + it("excludes changed files from location evidence", () => { const findings = analyze([ file("src/utils/apiClient.ts", true),