From 1f692c83e2e6dcf175f32c8ac532b77eb556b4d6 Mon Sep 17 00:00:00 2001 From: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Date: Sat, 10 Oct 2026 00:47:51 -0700 Subject: [PATCH] perf(artifacts): stop repeating every artifact path as Evidence locations (#1492) inventory_artifact, inspect_artifact, and extract_artifact copied each occurrence or extracted file path into Evidence locations, although the result already names every one. inspect_artifact did so twice, in its own Evidence and in the nested inventory Evidence. Like other whole-target Evidence, these now report no locations. Visual Studio Code.app: inspect_artifact 15.37 MB to 13.07 MB, extract_artifact 1.40 MB to 1.06 MB. Co-authored-by: Claude Opus 5.5 --- src/artifacts/ArtifactProvider.ts | 21 +++++++------------ .../artifactProvider.archiveInventory.test.ts | 3 +++ .../artifactProvider.extraction.test.ts | 2 ++ 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/artifacts/ArtifactProvider.ts b/src/artifacts/ArtifactProvider.ts index fe5d24ef0f..821455903b 100644 --- a/src/artifacts/ArtifactProvider.ts +++ b/src/artifacts/ArtifactProvider.ts @@ -194,10 +194,8 @@ class ArtifactClient implements AnalysisClient { this.target.sourcePath ?? this.target.path, result.manifest, ), - locations: result.artifacts.map(({ relative_path: path }) => ({ - kind: "artifact-path" as const, - path, - })), + // Each extracted file's path is already in artifacts. + locations: [], }), ); } @@ -211,10 +209,8 @@ class ArtifactClient implements AnalysisClient { this.target.sourcePath ?? this.target.path, result.manifest, ), - locations: result.occurrences.map(({ logical_path: path }) => ({ - kind: "artifact-path" as const, - path, - })), + // Each occurrence's logical path is already in the result. + locations: [], }), ); } catch (cause: unknown) { @@ -323,17 +319,14 @@ class ArtifactClient implements AnalysisClient { this.target.sourcePath ?? this.target.path, inventory.manifest, ); - const locations = inventory.occurrences.map(({ logical_path: path }) => ({ - kind: "artifact-path" as const, - path, - })); const inventoryEvidence = createEvidence(subject, ARTIFACT_GRAPH_PROVIDER, { operation: "inventory_artifact", parameters: inventoryParameters, result: inventory, rawResult: null, limitations: inventory.limitations, - locations, + // The nested inventory already names every occurrence's logical path. + locations: [], }); const result = createArtifactInspection(inventoryEvidence); await options?.progress?.report({ @@ -347,7 +340,7 @@ class ArtifactClient implements AnalysisClient { rawResult: null, limitations: result.limitations, subject, - locations, + locations: [], }), ); } diff --git a/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts b/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts index 2da4a98f4f..79765e711a 100644 --- a/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts +++ b/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts @@ -66,6 +66,9 @@ describe("artifact archive inventory", () => { inspection.substeps[0]?.evidence.normalized_result, ).occurrences, ).toHaveLength(3); + // Occurrences name every logical path; neither Evidence repeats them. + expect(inspectionEvidence.locations).toEqual([]); + expect(inspection.substeps[0]?.evidence.locations).toEqual([]); expect(inspection.observations.map(({ kind }) => kind)).toEqual([ "root-manifest", ]); diff --git a/tests/boundary/providers/native/artifactProvider.extraction.test.ts b/tests/boundary/providers/native/artifactProvider.extraction.test.ts index 9726e5560b..9a538e2b12 100644 --- a/tests/boundary/providers/native/artifactProvider.extraction.test.ts +++ b/tests/boundary/providers/native/artifactProvider.extraction.test.ts @@ -65,6 +65,8 @@ describe("artifact extraction", () => { ]), extraction_manifest: { output_root_alias: "$OUTPUT_ROOT" }, }); + // artifacts names every extracted path; the Evidence does not repeat them. + expect(result.value.locations).toEqual([]); expect(await readFile(join(output, "assets", "selected.js"), "utf8")).toBe( "selected();\n", );