fix: normalize Windows backup filename suffixes

This commit is contained in:
Eneko Ruiz committed 2026-10-18 13:17:36 +02:00
1 parent 2a2e6e3848
commit f685582ebe
2 files changed
+13 -1

No files matched your search

+1 -1
View File
@@ -25,7 +25,7 @@ function normalizeFailureReason(reason) {
.replace(/(["'])(?:[a-z]:[\\/]|\\\\)[^\r\n]*?\1/gu, '$1<path>$1')
// Directories may contain spaces, but trailing whitespace separates diagnostic prose.
// Spaced leaves need an extension before a colon, or quotes; preserve extensionless diagnostics.
.replace(/(?:\b[a-z]:|\\)[\\/](?:[^\\/:*?"<>|\r\n]*[^\s\\/:*?"<>|][\\/])*[^\s\\/:*?"<>|(),;]+(?: [^\\/:*?"<>|\r\n]*\.[\p{L}\p{N}_-]+(?=:))?[\\/]*/gu, '<path>')
.replace(/(?:\b[a-z]:|\\)[\\/](?:[^\\/:*?"<>|\r\n]*[^\s\\/:*?"<>|][\\/])*[^\s\\/:*?"<>|(),;]+(?: [^\\/:*?"<>|\r\n]*\.[^\s\\/:*?"<>|]+(?=:))?[\\/]*/gu, '<path>')
// Strip remaining file paths
.replace(/(?:\b[a-z]:)?[\\/][\w./\\-]+/g, '<path>')
// Collapse whitespace
+12
View File
@@ -104,6 +104,9 @@ async function runTests() {
String.raw`C:\Users\Alice Smith\my file.js`,
'D:/Users/Bob Jones/your script.js',
String.raw`\\server\shared files\other task.js`,
String.raw`C:\work\my alpha.js~`,
'D:/work/my beta.py#',
String.raw`E:\work\my gamma.c++`,
]) {
assert.strictEqual(normalizeFailureReason(`${filePath}: permission denied`), '<path>: permission denied');
}
@@ -253,6 +256,15 @@ async function runTests() {
assert.strictEqual(directoryPatterns.length, 1);
assert.strictEqual(directoryPatterns[0].count, 3);
assert.strictEqual(generateReport(directoryPatterns).status, 'attention_needed');
const backupRuns = [
String.raw`C:\work\my alpha.js~`,
'D:/work/my beta.js~',
String.raw`\\server\share\my gamma.js~`,
].map((filePath, index) => makeSkillRun({ id: `backup-${index}`, failureReason: `Cannot open ${filePath}: permission denied` }));
const backupPatterns = detectPatterns(backupRuns);
assert.strictEqual(backupPatterns.length, 1);
assert.strictEqual(backupPatterns[0].count, 3);
assert.strictEqual(generateReport(backupPatterns).status, 'attention_needed');
})) passed += 1; else failed += 1;
if (await test('detectPatterns tracks unique session IDs and versions', async () => {