From 2f02eff9887fc715c33f5d8770a6e6191ba70ca9 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Fri, 9 Oct 2026 20:03:55 +0800 Subject: [PATCH] fix(managed): separate metadata and signature completeness --- src/domain/managed/managedMemberComparison.ts | 10 ++-------- .../managedMemberComparisonFromMetadata.test.ts | 16 +++++++++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/domain/managed/managedMemberComparison.ts b/src/domain/managed/managedMemberComparison.ts index 3858ac8b6..9e78130f4 100644 --- a/src/domain/managed/managedMemberComparison.ts +++ b/src/domain/managed/managedMemberComparison.ts @@ -218,18 +218,12 @@ export const compareManagedMembers = ( left: ManagedMemberComparisonSide, right: ManagedMemberComparisonSide, ): ManagedMemberComparisonResult => { - const leftCoverage = { - sourceComplete: left.result.coverage.state === "complete", - }; - const rightCoverage = { - sourceComplete: right.result.coverage.state === "complete", - }; const { methodMatches, fieldMatches } = keyMembers(left, right); const itemContext = { leftEvidenceId: left.evidenceId, rightEvidenceId: right.evidenceId, - leftComplete: leftCoverage.sourceComplete, - rightComplete: rightCoverage.sourceComplete, + leftComplete: left.result.metadata.status === "complete", + rightComplete: right.result.metadata.status === "complete", }; const methodItems = buildMethodItems(methodMatches, itemContext); const fieldItems = buildFieldItems(fieldMatches, itemContext); diff --git a/tests/boundary/providers/managed/managedMemberComparisonFromMetadata.test.ts b/tests/boundary/providers/managed/managedMemberComparisonFromMetadata.test.ts index 13d84b90f..813889ca6 100644 --- a/tests/boundary/providers/managed/managedMemberComparisonFromMetadata.test.ts +++ b/tests/boundary/providers/managed/managedMemberComparisonFromMetadata.test.ts @@ -160,11 +160,13 @@ describe("managed member comparison uncertainty", () => { const leftPartial = { ...left.result, fields: [], + metadata: { ...left.result.metadata, status: "partial" as const }, coverage: { ...left.result.coverage, state: "partial" as const }, }; const rightPartial = { ...right.result, methods: [], + metadata: { ...right.result.metadata, status: "partial" as const }, coverage: { ...right.result.coverage, state: "partial" as const }, }; const result = compareManagedMembers( @@ -266,7 +268,8 @@ describe("managed member comparison of undecoded signatures", () => { "/tmp/undecoded-method-renamed.dll", ); expect(left.result.methods[0]?.signature.parse_status).toBe("unsupported"); - expect(renamed.result.coverage.state).toBe("complete"); + expect(renamed.result.metadata.status).toBe("complete"); + expect(renamed.result.coverage.state).toBe("partial"); const exact = compareManagedMembers(left, renamed); expect(exact.methods).toEqual([ @@ -318,7 +321,8 @@ describe("managed member comparison of undecoded signatures", () => { buildManagedPeFixture(undecoded), "/tmp/undecoded-right.dll", ); - expect(left.result.coverage.state).toBe("complete"); + expect(left.result.metadata.status).toBe("complete"); + expect(left.result.coverage.state).toBe("partial"); expect(left.result.methods[0]?.signature.parse_status).toBe("unsupported"); expect(left.result.fields[0]?.signature.parse_status).toBe("unsupported"); const result = compareManagedMembers(left, right); @@ -338,7 +342,7 @@ describe("managed member comparison of undecoded signatures", () => { }); }); - it("keeps unmatched undecoded members unknown in complete inventories", () => { + it("keeps unmatched undecoded members unknown with complete metadata inventories", () => { const left = inspect( buildManagedPeFixture({ methodSignature: Buffer.from([0x00, 0x00, 0x7f]), @@ -353,7 +357,8 @@ describe("managed member comparison of undecoded signatures", () => { }), "/tmp/undecoded-after.dll", ); - expect(right.result.coverage.state).toBe("complete"); + expect(right.result.metadata.status).toBe("complete"); + expect(right.result.coverage.state).toBe("partial"); const result = compareManagedMembers(left, right); expect(result.summary).toMatchObject({ added: 0, removed: 0, unknown: 4 }); for (const item of [...result.methods, ...result.fields]) @@ -375,7 +380,8 @@ describe("managed member comparison of undecoded signatures", () => { ); expect(left.result.methods[0]?.signature.parse_status).toBe("decoded"); expect(left.result.fields[0]?.signature.parse_status).toBe("decoded"); - expect(right.result.coverage.state).toBe("complete"); + expect(right.result.metadata.status).toBe("complete"); + expect(right.result.coverage.state).toBe("partial"); const result = compareManagedMembers(left, right); expect(result.summary).toMatchObject({ added: 0, removed: 0, unknown: 4 }); for (const item of [...result.methods, ...result.fields])