Skip to content

Commit 73b5313

Browse files
kertalclaude
andcommitted
fix: address PR #49 review comments
- Exclude setup/teardown hook files (setup.js, teardown.js, *.setup.js, *.teardown.js) from .js racer fallback in discoverRacers - Add settled flag in runScript to prevent double-resolve/reject when timeout fires and close event both trigger Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 43a9068 commit 73b5313

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

cli/config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ export function discoverRacers(raceDir) {
3232
let racerFiles = allFiles.filter(f => f.endsWith('.spec.js')).sort();
3333

3434
if (racerFiles.length < 2) {
35-
const jsFiles = allFiles.filter(f => f.endsWith('.js')).sort();
35+
// Exclude setup/teardown hook files from racer fallback
36+
const hookPattern = /\.(setup|teardown)\.js$/;
37+
const jsFiles = allFiles.filter(f => f.endsWith('.js') && !hookPattern.test(f) && f !== 'setup.js' && f !== 'teardown.js').sort();
3638
if (jsFiles.length >= 2) {
3739
console.error(`Warning: Found ${racerFiles.length} .spec.js files, using .js files instead`);
3840
racerFiles = jsFiles;

race.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,7 @@ async function runScript(script, label) {
584584
let stdout = '';
585585
let stderr = '';
586586
let timedOut = false;
587+
let settled = false;
587588

588589
child.stdout.on('data', d => { stdout += d; });
589590
child.stderr.on('data', d => { stderr += d; });
@@ -597,8 +598,10 @@ async function runScript(script, label) {
597598
}, 5000);
598599
}, timeout);
599600

600-
child.on('close', code => {
601+
child.on('close', (code) => {
601602
clearTimeout(timeoutId);
603+
if (settled) return;
604+
settled = true;
602605

603606
if (timedOut) {
604607
progress.done(`${label} timed out after ${timeout}ms`);
@@ -655,6 +658,8 @@ async function runScript(script, label) {
655658

656659
child.on('error', err => {
657660
clearTimeout(timeoutId);
661+
if (settled) return;
662+
settled = true;
658663
progress.done(`${label} error: ${err.message}`);
659664
reject(err);
660665
});

0 commit comments

Comments
 (0)