* fix(#1525): skip deferred phases on autonomous reruns * chore(#1525): add changeset fragment * chore(#1525): fix changeset body * test(#1525): refresh install parity fixtures * test(#1525): shrink autonomous workflow * test(#1525): refresh autonomous baselines * test(#1525): tolerate Windows temp cleanup flake
This commit is contained in:
@@ -139,6 +139,16 @@ describe('autonomous verification deferral contract', () => {
|
||||
/Gaps deferred` and proceed to iterate step/,
|
||||
'gap deferral must not silently proceed to the next phase',
|
||||
);
|
||||
assert.match(
|
||||
workflow,
|
||||
/Skip deferred phases on autonomous re-entry/,
|
||||
'reruns must explicitly skip deferred verification phases',
|
||||
);
|
||||
assert.match(
|
||||
workflow,
|
||||
/Deferred Verification \(Skipped on Re-entry\)/,
|
||||
'workflow should surface skipped deferred phases and their resume commands',
|
||||
);
|
||||
});
|
||||
|
||||
test('workflow runs normal transition post-processing after passed verification (#1526)', () => {
|
||||
@@ -197,6 +207,8 @@ describe('autonomous verification deferral contract', () => {
|
||||
);
|
||||
assert.match(discoverStep, /phase_complete !== true/);
|
||||
assert.match(discoverStep, /verification_status !== "passed"/);
|
||||
assert.match(discoverStep, /STATE_CONTENT=\$\(cat \.planning\/STATE\.md 2>\/dev\/null \|\| true\)/);
|
||||
assert.match(discoverStep, /drop any phase whose number appears in the deferred-phase map/);
|
||||
assert.doesNotMatch(discoverStep, /ROADMAP=\$\(gsd_run query roadmap\.analyze\)/);
|
||||
assert.doesNotMatch(discoverStep, /disk_status !== "complete"/);
|
||||
|
||||
@@ -207,5 +219,7 @@ describe('autonomous verification deferral contract', () => {
|
||||
);
|
||||
assert.match(iterateStep, /phase_complete !== true/);
|
||||
assert.match(iterateStep, /verification_status !== "passed"/);
|
||||
assert.match(iterateStep, /STATE_CONTENT=\$\(cat \.planning\/STATE\.md 2>\/dev\/null \|\| true\)/);
|
||||
assert.match(iterateStep, /drop deferred phases from the autonomous queue/);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "9787a0ef00be649c",
|
||||
"gsd-core/workflows/audit-milestone.md": "5e73ad8112a9b9b4",
|
||||
"gsd-core/workflows/audit-uat.md": "777262a63dcaacdc",
|
||||
"gsd-core/workflows/autonomous.md": "f145bbc649fd8aa6",
|
||||
"gsd-core/workflows/autonomous.md": "443c5f64043df8ae",
|
||||
"gsd-core/workflows/check-todos.md": "f6a93906922dd939",
|
||||
"gsd-core/workflows/cleanup.md": "53aa20672fe253bd",
|
||||
"gsd-core/workflows/code-review-fix.md": "715d98a6ff5931e2",
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "fe7185bb70eafdb9",
|
||||
"gsd-core/workflows/audit-uat.md": "ca6f1f0ef174f793",
|
||||
"gsd-core/workflows/autonomous.md": "ba6828223ba13c1f",
|
||||
"gsd-core/workflows/autonomous.md": "6a69708c184ac6a7",
|
||||
"gsd-core/workflows/check-todos.md": "1e3026abe782bd36",
|
||||
"gsd-core/workflows/cleanup.md": "5cf0772521c192a4",
|
||||
"gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93",
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "5e9a35af57344e04",
|
||||
"gsd-core/workflows/audit-uat.md": "69dbdec25cae2f12",
|
||||
"gsd-core/workflows/autonomous.md": "c72e08a2afc08828",
|
||||
"gsd-core/workflows/autonomous.md": "62d751d0fe6f14bc",
|
||||
"gsd-core/workflows/check-todos.md": "fa637b6cc9be647c",
|
||||
"gsd-core/workflows/cleanup.md": "5cf0772521c192a4",
|
||||
"gsd-core/workflows/code-review-fix.md": "a416c764425cbb61",
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "85a83f15012e220d",
|
||||
"gsd-core/workflows/audit-milestone.md": "7e68a0d33382fbca",
|
||||
"gsd-core/workflows/audit-uat.md": "2ab2975014fbb210",
|
||||
"gsd-core/workflows/autonomous.md": "40a72366442139c2",
|
||||
"gsd-core/workflows/autonomous.md": "c4d9da6056aeb782",
|
||||
"gsd-core/workflows/check-todos.md": "ab6239efbf42077b",
|
||||
"gsd-core/workflows/cleanup.md": "869f953fb25e57a7",
|
||||
"gsd-core/workflows/code-review-fix.md": "40d723ec1c6b45d1",
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "fe7185bb70eafdb9",
|
||||
"gsd-core/workflows/audit-uat.md": "ca6f1f0ef174f793",
|
||||
"gsd-core/workflows/autonomous.md": "ba6828223ba13c1f",
|
||||
"gsd-core/workflows/autonomous.md": "6a69708c184ac6a7",
|
||||
"gsd-core/workflows/check-todos.md": "1e3026abe782bd36",
|
||||
"gsd-core/workflows/cleanup.md": "5cf0772521c192a4",
|
||||
"gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93",
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "28afeeab183e254f",
|
||||
"gsd-core/workflows/audit-uat.md": "b3b503e9f80dc9f5",
|
||||
"gsd-core/workflows/autonomous.md": "d8ed420051f4d670",
|
||||
"gsd-core/workflows/autonomous.md": "b371d3c2ccaa0f42",
|
||||
"gsd-core/workflows/check-todos.md": "d847aa758e18d698",
|
||||
"gsd-core/workflows/cleanup.md": "b990139192ab7c08",
|
||||
"gsd-core/workflows/code-review-fix.md": "3311f5fa61f8a90b",
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "bd88277e075ec47f",
|
||||
"gsd-core/workflows/audit-milestone.md": "3c1624402b54073d",
|
||||
"gsd-core/workflows/audit-uat.md": "eccd8feb247425b0",
|
||||
"gsd-core/workflows/autonomous.md": "00fa6860aa7653a8",
|
||||
"gsd-core/workflows/autonomous.md": "44ba4186752758c0",
|
||||
"gsd-core/workflows/check-todos.md": "4cdc0f448c772fbf",
|
||||
"gsd-core/workflows/cleanup.md": "a67cfbd98eca5b86",
|
||||
"gsd-core/workflows/code-review-fix.md": "84d5f91b2856a1f2",
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "5e9a35af57344e04",
|
||||
"gsd-core/workflows/audit-uat.md": "69dbdec25cae2f12",
|
||||
"gsd-core/workflows/autonomous.md": "70065ffffd8886cf",
|
||||
"gsd-core/workflows/autonomous.md": "c51a8b19aa869149",
|
||||
"gsd-core/workflows/check-todos.md": "a993c1e7b0eff1f6",
|
||||
"gsd-core/workflows/cleanup.md": "2bd6ad5f107fe439",
|
||||
"gsd-core/workflows/code-review-fix.md": "c62547be55f13dcd",
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "fe7185bb70eafdb9",
|
||||
"gsd-core/workflows/audit-uat.md": "ca6f1f0ef174f793",
|
||||
"gsd-core/workflows/autonomous.md": "7cc800bc9a5bfc8a",
|
||||
"gsd-core/workflows/autonomous.md": "c1bbd56f92dda773",
|
||||
"gsd-core/workflows/check-todos.md": "34b3034a31e7dbe5",
|
||||
"gsd-core/workflows/cleanup.md": "e73b3969f5c10dcf",
|
||||
"gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93",
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "5aded4cc2682502b",
|
||||
"gsd-core/workflows/audit-milestone.md": "c36d1c46d4aecca7",
|
||||
"gsd-core/workflows/audit-uat.md": "5e93ef61f91ad0c0",
|
||||
"gsd-core/workflows/autonomous.md": "7a482d2afb346e57",
|
||||
"gsd-core/workflows/autonomous.md": "6f4df1e9a17a71c4",
|
||||
"gsd-core/workflows/check-todos.md": "8807759cc4df46c0",
|
||||
"gsd-core/workflows/cleanup.md": "6380894e67d2435d",
|
||||
"gsd-core/workflows/code-review-fix.md": "5090840d834ec31a",
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "5e9a35af57344e04",
|
||||
"gsd-core/workflows/audit-uat.md": "69dbdec25cae2f12",
|
||||
"gsd-core/workflows/autonomous.md": "ac4f18090bd4b178",
|
||||
"gsd-core/workflows/autonomous.md": "6ebf93b8ed1155f3",
|
||||
"gsd-core/workflows/check-todos.md": "cde0a3025828bad8",
|
||||
"gsd-core/workflows/cleanup.md": "d124682912dab9f6",
|
||||
"gsd-core/workflows/code-review-fix.md": "a416c764425cbb61",
|
||||
|
||||
@@ -235,7 +235,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "eaead7ea85761e5b",
|
||||
"gsd-core/workflows/audit-milestone.md": "fe7185bb70eafdb9",
|
||||
"gsd-core/workflows/audit-uat.md": "ca6f1f0ef174f793",
|
||||
"gsd-core/workflows/autonomous.md": "ba6828223ba13c1f",
|
||||
"gsd-core/workflows/autonomous.md": "6a69708c184ac6a7",
|
||||
"gsd-core/workflows/check-todos.md": "1e3026abe782bd36",
|
||||
"gsd-core/workflows/cleanup.md": "5cf0772521c192a4",
|
||||
"gsd-core/workflows/code-review-fix.md": "b442c670f8c1fe93",
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "c7878f1dff04adf1",
|
||||
"gsd-core/workflows/audit-milestone.md": "99f0b884c9208dde",
|
||||
"gsd-core/workflows/audit-uat.md": "e530acf37fd9c699",
|
||||
"gsd-core/workflows/autonomous.md": "9a19deccc06a702e",
|
||||
"gsd-core/workflows/autonomous.md": "dacf6c73407fe29c",
|
||||
"gsd-core/workflows/check-todos.md": "42806d03eacf9ff6",
|
||||
"gsd-core/workflows/cleanup.md": "daca0c4f1d531a02",
|
||||
"gsd-core/workflows/code-review-fix.md": "618c850533bd5c9e",
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "75f9d02e6924913c",
|
||||
"gsd-core/workflows/audit-milestone.md": "49d1978340cf89ef",
|
||||
"gsd-core/workflows/audit-uat.md": "b38b4e18e2abd51b",
|
||||
"gsd-core/workflows/autonomous.md": "aa104d2eec3f112f",
|
||||
"gsd-core/workflows/autonomous.md": "df74d15ceddb0190",
|
||||
"gsd-core/workflows/check-todos.md": "7fc4a39f3e83dde7",
|
||||
"gsd-core/workflows/cleanup.md": "804c5d481279f008",
|
||||
"gsd-core/workflows/code-review-fix.md": "7d6caed073170b2a",
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "493e4abe4f701662",
|
||||
"gsd-core/workflows/audit-milestone.md": "26b2428d9a8df7b2",
|
||||
"gsd-core/workflows/audit-uat.md": "f02cd45df6304b06",
|
||||
"gsd-core/workflows/autonomous.md": "09f390b492bc8801",
|
||||
"gsd-core/workflows/autonomous.md": "e2b5525089396882",
|
||||
"gsd-core/workflows/check-todos.md": "e4209530a4132312",
|
||||
"gsd-core/workflows/cleanup.md": "78080ff25ba43f8c",
|
||||
"gsd-core/workflows/code-review-fix.md": "4eebfb7f1612b441",
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"gsd-core/workflows/audit-fix.md": "e1ad3e58979d9eef",
|
||||
"gsd-core/workflows/audit-milestone.md": "e578d1ce71b172e6",
|
||||
"gsd-core/workflows/audit-uat.md": "0f779101b40c7229",
|
||||
"gsd-core/workflows/autonomous.md": "fbd5185763707f74",
|
||||
"gsd-core/workflows/autonomous.md": "605f4563acd39ae4",
|
||||
"gsd-core/workflows/check-todos.md": "ad2ff17a672e7101",
|
||||
"gsd-core/workflows/cleanup.md": "edc0bc375acdb563",
|
||||
"gsd-core/workflows/code-review-fix.md": "aa750f6d1abd3b9f",
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
const { execFileSync } = require('child_process');
|
||||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
const path = require('path');
|
||||
const { createFixture } = require('./fixtures/index.cjs');
|
||||
|
||||
@@ -130,6 +131,7 @@ function cleanup(tmpDir) {
|
||||
if (typeof tmpDir !== 'string' || tmpDir.length === 0) return;
|
||||
const target = path.resolve(tmpDir);
|
||||
const cwd = path.resolve(process.cwd());
|
||||
const tmpRoot = path.resolve(os.tmpdir());
|
||||
if (cwd === target || cwd.startsWith(`${target}${path.sep}`)) {
|
||||
// Windows cannot remove a directory that is the current working directory.
|
||||
process.chdir(path.dirname(target));
|
||||
@@ -139,7 +141,17 @@ function cleanup(tmpDir) {
|
||||
// teardown runs. On POSIX the retry loop is a no-op (rmSync succeeds first try).
|
||||
// Budget: 20 × 250ms = 5s total — Windows Defender's deferred scan can hold
|
||||
// newly-written files for several seconds on cold runners.
|
||||
fs.rmSync(target, { recursive: true, force: true, maxRetries: 20, retryDelay: 250 });
|
||||
try {
|
||||
fs.rmSync(target, { recursive: true, force: true, maxRetries: 20, retryDelay: 250 });
|
||||
} catch (error) {
|
||||
// After retries, Windows can still briefly hold temp dirs open after a timed-out
|
||||
// child exits. Ignore that teardown-only flake for temp roots, but rethrow everything else.
|
||||
const isTmpPath = target === tmpRoot || target.startsWith(`${tmpRoot}${path.sep}`);
|
||||
const isTransientWinErr = process.platform === 'win32'
|
||||
&& isTmpPath
|
||||
&& ['EBUSY', 'ENOTEMPTY', 'EPERM'].includes(error && error.code);
|
||||
if (!isTransientWinErr) throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"audit-fix.md": 10988,
|
||||
"audit-milestone.md": 17637,
|
||||
"audit-uat.md": 7425,
|
||||
"autonomous.md": 42747,
|
||||
"autonomous.md": 41790,
|
||||
"check-todos.md": 9431,
|
||||
"cleanup.md": 9897,
|
||||
"code-review-fix.md": 23890,
|
||||
|
||||
Reference in New Issue
Block a user