From cfd4d1d13a210cca97238c58661f2ed785616cc9 Mon Sep 17 00:00:00 2001 From: mastertyko <11311479+mastertyko@users.noreply.github.com> Date: Sat, 11 Apr 2026 17:30:22 +0200 Subject: [PATCH] fix(gsd): ignore pre-existing files in task ordering --- .../extensions/gsd/pre-execution-checks.ts | 6 ++-- .../gsd/tests/pre-execution-checks.test.ts | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/resources/extensions/gsd/pre-execution-checks.ts b/src/resources/extensions/gsd/pre-execution-checks.ts index 1e49a3909..bdb3ba25b 100644 --- a/src/resources/extensions/gsd/pre-execution-checks.ts +++ b/src/resources/extensions/gsd/pre-execution-checks.ts @@ -354,7 +354,7 @@ export function checkFilePathConsistency( */ export function checkTaskOrdering( tasks: TaskRow[], - _basePath: string + basePath: string ): PreExecutionCheckJSON[] { const results: PreExecutionCheckJSON[] = []; @@ -380,7 +380,9 @@ export function checkTaskOrdering( for (const file of filesToCheck) { const normalizedFile = normalizeFilePath(file); const creator = fileCreators.get(normalizedFile); - if (creator && creator.index > i) { + const absolutePath = resolve(basePath, normalizedFile); + const existsOnDisk = existsSync(absolutePath); + if (creator && creator.index > i && !existsOnDisk) { // Task reads file that is created later — impossible ordering results.push({ category: "file", diff --git a/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts b/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts index 79ac6a692..14bc5ec1c 100644 --- a/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +++ b/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts @@ -1107,6 +1107,38 @@ describe("checkTaskOrdering false positive regression (#3677)", () => { assert.equal(results[0].target, "`later.ts` — needed first"); assert.ok(results[0].message.includes("sequence violation")); }); + + test("existing on-disk files do not trigger ordering violations just because a later task modifies them", () => { + const tempDir = join(tmpdir(), `pre-exec-ordering-existing-file-${Date.now()}`); + const existingFile = "frontend/src/__tests__/ProcurementPage29.test.tsx"; + + mkdirSync(join(tempDir, "frontend", "src", "__tests__"), { recursive: true }); + writeFileSync(join(tempDir, existingFile), "// existing file"); + + try { + const tasks = [ + createTask({ + id: "T01", + sequence: 0, + files: [], + inputs: ["`frontend/src/__tests__/ProcurementPage29.test.tsx` — contains matchMedia stub to remove"], + expected_output: [], + }), + createTask({ + id: "T03", + sequence: 2, + files: [], + inputs: [], + expected_output: ["frontend/src/__tests__/ProcurementPage29.test.tsx"], + }), + ]; + + const results = checkTaskOrdering(tasks, tempDir); + assert.equal(results.length, 0, "Pre-existing files should not be treated as created by later tasks"); + } finally { + rmSync(tempDir, { recursive: true, force: true }); + } + }); }); // ─── checkFilePathConsistency additional edge cases ──────────────────────────