From 935b62249b9268ba380a062a0bf03cd0ab83a437 Mon Sep 17 00:00:00 2001 From: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Date: Wed, 14 Oct 2026 01:41:55 +0000 Subject: [PATCH] fix(managed): keep delivery detail out of retained Evidence identity Summary, omitted and complete delivery of the same managed inspection now retain one parent record, as inspect_macho already does. Co-Authored-By: Claude Opus 5.5 --- src/server/registerManagedTools.ts | 7 +++++-- tests/boundary/mcp/managedArtifactSummaryMcp.test.ts | 4 ++-- tests/boundary/mcp/managedMemberSummaryMcp.test.ts | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/server/registerManagedTools.ts b/src/server/registerManagedTools.ts index 9de9b4649..f5929243f 100644 --- a/src/server/registerManagedTools.ts +++ b/src/server/registerManagedTools.ts @@ -6,6 +6,7 @@ import { err } from "../domain/result.js"; import { registerEvidenceTools } from "./registerEvidenceTools.js"; import { retainedSummaryDelivery, + withoutDeliveryDetail, type EvidenceToolFamilyOptions, } from "./retainedSummaryDelivery.js"; import { runManagedProviderExecution } from "../composition/directAnalysis.js"; @@ -23,13 +24,13 @@ export const registerManagedTools = ( options: EvidenceToolFamilyOptions, ): void => { let selectedManagedPath: string | undefined; + const withoutDelivery = withoutDeliveryDetail(SUMMARY_DELIVERY); const analysisForAdmission = ( analysis: AnalysisOperationPort, ): AnalysisOperationPort => ({ execute: async (operation, parameters, executionOptions) => { if (!isManagedToolName(operation)) return analysis.execute(operation, parameters, executionOptions); - const { detail: _detail, ...providerParameters } = parameters; const requestedPath = parameters.path; const activeTarget = options.activeTarget?.(); const path = @@ -54,7 +55,7 @@ export const registerManagedTools = ( path, operation, executionOptions?.signal, - providerParameters, + parameters, ); if (execution.ok && typeof requestedPath === "string") selectedManagedPath = requestedPath; @@ -64,6 +65,8 @@ export const registerManagedTools = ( registerEvidenceTools(server, MANAGED_TOOL_CONTRACTS, { ...options, ...retainedSummaryDelivery(SUMMARY_DELIVERY, options), + parametersForExecution: withoutDelivery, + parametersForEvidence: withoutDelivery, analysisForAdmission, }); }; diff --git a/tests/boundary/mcp/managedArtifactSummaryMcp.test.ts b/tests/boundary/mcp/managedArtifactSummaryMcp.test.ts index 7bb38abe8..0d32bd6e3 100644 --- a/tests/boundary/mcp/managedArtifactSummaryMcp.test.ts +++ b/tests/boundary/mcp/managedArtifactSummaryMcp.test.ts @@ -76,7 +76,7 @@ it("returns a first-call overview and pages the unchanged source after its file parent.normalized_result, ); expect(parent.operation).toBe("inspect_managed_artifact"); - expect(parent.parameters).toEqual({ path, detail: "summary" }); + expect(parent.parameters).toEqual({ path }); expect(receipt.evidence_id).not.toBe(parent.evidence_id); expect(receipt.evidence_links).toEqual([parent.evidence_id]); const { references, resources, attributes, ...identity } = report; @@ -97,7 +97,7 @@ it("returns a first-call overview and pages the unchanged source after its file ).structuredContent, ); expect(complete.operation).toBe("inspect_managed_artifact"); - expect(complete.normalized_result).toEqual(parent.normalized_result); + expect(complete.evidence_id).toBe(parent.evidence_id); } const reused = await client.callTool({ name: "inspect_managed_native_boundaries", diff --git a/tests/boundary/mcp/managedMemberSummaryMcp.test.ts b/tests/boundary/mcp/managedMemberSummaryMcp.test.ts index d3ddf0d69..810e8e9c8 100644 --- a/tests/boundary/mcp/managedMemberSummaryMcp.test.ts +++ b/tests/boundary/mcp/managedMemberSummaryMcp.test.ts @@ -111,6 +111,7 @@ it("summarizes selected members and pages every original collection after the fi if (parent === undefined) throw new Error("Complete member source was not retained"); expect(parent.operation).toBe("inspect_managed_members"); + expect(parent.parameters).toEqual({ path, type_names }); expect(receipt.evidence_links).toEqual([parent.evidence_id]); const report = managedMemberInspectionSchema.parse(parent.normalized_result); expect(view.summary.selection).toEqual({ @@ -130,7 +131,7 @@ it("summarizes selected members and pages every original collection after the fi ).structuredContent, ); expect(complete.operation).toBe("inspect_managed_members"); - expect(complete.normalized_result).toEqual(parent.normalized_result); + expect(complete.evidence_id).toBe(parent.evidence_id); } const original = JSON.stringify(parent); await unlink(path);