From 7cdbcb7425896741a8db6943f62a30ea76f64cd4 Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Mon, 4 May 2026 16:34:55 +0200 Subject: [PATCH] test(ultraplan-local): add ultracontinue to FLAG_SCHEMA + tests Step 1 of v3.4.1 hot-fix plan (project 2026-05-04-v3.3.1-ultracontinue-fixes). Adds ultracontinue entry to FLAG_SCHEMA covering boolean flags --help, --cleanup, --confirm, --dry-run with no valued flags. The -h short form is intentionally not aliased: it appears as positional[0] === '-h' and the command prose dispatches usage on either condition. 7 new tests in tests/lib/arg-parser.test.mjs verify empty args, --help, -h positional, --cleanup, --cleanup --confirm, project-dir positional, and .md positional (parser-level accept; command-level reject). --- .../lib/parsers/arg-parser.mjs | 5 +++ .../tests/lib/arg-parser.test.mjs | 42 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/plugins/ultraplan-local/lib/parsers/arg-parser.mjs b/plugins/ultraplan-local/lib/parsers/arg-parser.mjs index aa6cda2..550a43a 100644 --- a/plugins/ultraplan-local/lib/parsers/arg-parser.mjs +++ b/plugins/ultraplan-local/lib/parsers/arg-parser.mjs @@ -31,6 +31,11 @@ const FLAG_SCHEMA = { valued: ['--project', '--since'], aliases: {}, }, + ultracontinue: { + boolean: ['--help', '--cleanup', '--confirm', '--dry-run'], + valued: [], + aliases: {}, + }, }; /** diff --git a/plugins/ultraplan-local/tests/lib/arg-parser.test.mjs b/plugins/ultraplan-local/tests/lib/arg-parser.test.mjs index 42624fe..6425252 100644 --- a/plugins/ultraplan-local/tests/lib/arg-parser.test.mjs +++ b/plugins/ultraplan-local/tests/lib/arg-parser.test.mjs @@ -96,3 +96,45 @@ test('ultrareview — unknown flag goes to unknown[]', () => { const r = parseArgs('--mystery foo', 'ultrareview'); assert.ok(r.unknown.includes('--mystery')); }); + +test('ultracontinue — empty args produce no flags and no positional', () => { + const r = parseArgs('', 'ultracontinue'); + assert.equal(r.command, 'ultracontinue'); + assert.deepEqual(r.flags, {}); + assert.deepEqual(r.positional, []); + assert.deepEqual(r.errors, []); +}); + +test('ultracontinue — --help boolean flag', () => { + const r = parseArgs('--help', 'ultracontinue'); + assert.equal(r.flags['--help'], true); +}); + +test('ultracontinue — -h treated as positional (no alias resolution)', () => { + const r = parseArgs('-h', 'ultracontinue'); + assert.deepEqual(r.positional, ['-h']); + assert.deepEqual(r.errors, []); + assert.equal(r.flags['--help'], undefined); +}); + +test('ultracontinue — --cleanup boolean flag', () => { + const r = parseArgs('--cleanup', 'ultracontinue'); + assert.equal(r.flags['--cleanup'], true); +}); + +test('ultracontinue — --cleanup --confirm both flags', () => { + const r = parseArgs('--cleanup --confirm', 'ultracontinue'); + assert.equal(r.flags['--cleanup'], true); + assert.equal(r.flags['--confirm'], true); +}); + +test('ultracontinue — positional project dir captured', () => { + const r = parseArgs('.claude/projects/2026-05-04-foo', 'ultracontinue'); + assert.deepEqual(r.positional, ['.claude/projects/2026-05-04-foo']); +}); + +test('ultracontinue — .md positional accepted by parser (rejection is command-level)', () => { + const r = parseArgs('NEXT-SESSION-PROMPT.local.md', 'ultracontinue'); + assert.deepEqual(r.positional, ['NEXT-SESSION-PROMPT.local.md']); + assert.deepEqual(r.errors, []); +});