From 33d93ab155efe812bb3364b5b58465aa49230d58 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Sat, 19 Sep 2026 20:16:30 +0800 Subject: [PATCH] fix(session): accept safe numeric job-count overrides The command promises any positive safe integer, but its additional decimal-spelling regex rejected valid expert overrides such as 1e2 and +1. Let Number parse the supplied value and retain the positive safe-integer check. This preserves the CPU-based default cap while allowing equivalent numeric spellings and larger explicit values. --- scripts/migrate-sessions-to-v4.spec.ts | 6 +++--- scripts/migrate-sessions-to-v4.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/migrate-sessions-to-v4.spec.ts b/scripts/migrate-sessions-to-v4.spec.ts index 770a43b08d..249a65af3e 100644 --- a/scripts/migrate-sessions-to-v4.spec.ts +++ b/scripts/migrate-sessions-to-v4.spec.ts @@ -365,10 +365,10 @@ describe('one-time V4 migration command', () => { }) }) - it('accepts an explicit job count above the default cap', async () => { - const result = await run('--sessions-dir', temporaryRoot(), '--jobs', '32') + it.each(['32', '1e2', '+1', '01', ' 1'])('accepts positive safe-integer --jobs %s', async (jobs) => { + const result = await run('--sessions-dir', temporaryRoot(), '--jobs', jobs) expect(result.status, result.stdout + result.stderr).toBe(0) - expect(result.stdout).toContain('Session jobs: 32') + expect(result.stdout).toContain(`Session jobs: ${Number(jobs)}`) expect(result.stdout).toContain('converted=0, already-V4=0, failed=0, skipped=0') expect(result.summary).toMatchObject({ inputCount: 0, diff --git a/scripts/migrate-sessions-to-v4.ts b/scripts/migrate-sessions-to-v4.ts index 208821a16b..64f74c3996 100644 --- a/scripts/migrate-sessions-to-v4.ts +++ b/scripts/migrate-sessions-to-v4.ts @@ -289,7 +289,7 @@ if (process.argv[1] !== undefined && realpathSync(process.argv[1]) === realpathS if (values.help) console.log(usage) else { const jobs = values.jobs === undefined ? Math.min(availableParallelism(), 16) : Number(values.jobs) - if (!Number.isSafeInteger(jobs) || jobs < 1 || (values.jobs !== undefined && !/^[1-9]\d*$/u.test(values.jobs))) { + if (!Number.isSafeInteger(jobs) || jobs < 1) { throw new Error('--jobs must be a positive safe integer') } process.exitCode = await migrate(resolve(values['sessions-dir'] ?? join(homedir(), '.dsh', 'sessions')), jobs)