From 8a47cbbcce538f511609b90b5d40bd00920b3216 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Tue, 27 Oct 2026 07:54:09 +0800 Subject: [PATCH] fix(artifacts): deduplicate keyed archive selector choices --- src/artifacts/apple/KeyedArchiveReader.ts | 9 +++------ .../keyedArchiveStandaloneSelection.test.ts | 14 +++++++++++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/artifacts/apple/KeyedArchiveReader.ts b/src/artifacts/apple/KeyedArchiveReader.ts index 5a2e589751..5de89da089 100644 --- a/src/artifacts/apple/KeyedArchiveReader.ts +++ b/src/artifacts/apple/KeyedArchiveReader.ts @@ -240,18 +240,15 @@ export const inspectStandaloneKeyedArchive = (input: { const selected = keyedArchiveInputSchema.parse(input.parameters); const selectedBasename = basename(input.selectedPath); const physicalBasename = basename(input.path); - if ( - selected.path !== "." && - selected.path !== selectedBasename && - selected.path !== physicalBasename - ) + const basenames = [...new Set([selectedBasename, physicalBasename])]; + if (selected.path !== "." && !basenames.includes(selected.path)) throw new AnalysisInputError("inspect_keyed_archive", undefined, [ { path: ["path"], reason: "invalid_value", message: "For an active plist, path must select that archive (omit path or use its basename).", - expected: [selectedBasename, physicalBasename], + expected: basenames.length === 1 ? selectedBasename : basenames, }, ]); await assertStandaloneArchiveSelection( diff --git a/tests/boundary/filesystem/keyedArchiveStandaloneSelection.test.ts b/tests/boundary/filesystem/keyedArchiveStandaloneSelection.test.ts index 5c29f6019e..628fccfe8c 100644 --- a/tests/boundary/filesystem/keyedArchiveStandaloneSelection.test.ts +++ b/tests/boundary/filesystem/keyedArchiveStandaloneSelection.test.ts @@ -76,7 +76,19 @@ it.skipIf(process.platform === "win32")( await session.execute("inspect_keyed_archive", { path: "unrelated.plist", }), - ).toMatchObject({ ok: false, error: { _tag: "AnalysisInputError" } }); + ).toMatchObject({ + ok: false, + error: { + _tag: "AnalysisInputError", + issues: [ + { + path: ["path"], + reason: "invalid_value", + expected: [alias.split("/").at(-1), "stored.plist"], + }, + ], + }, + }); } await unlink(aliases[1]!); await symlink(other, aliases[1]!);