diff --git a/src/application/SourceLimitations.ts b/src/application/SourceLimitations.ts index 5c62cf3883..2f40961f82 100644 --- a/src/application/SourceLimitations.ts +++ b/src/application/SourceLimitations.ts @@ -25,6 +25,13 @@ export const sourceLimitationKey = ({ limitation, ]); +/** Provider/text identity shared by rendering and composed-workflow budgets. */ +export const sourceLimitationGroupKey = ({ + provider, + limitation, +}: Pick): string => + JSON.stringify([provider.id, provider.name, provider.version, limitation]); + /** Render unique source caveats without losing their provider or operation. */ export const renderSourceLimitations = ( limitations: readonly SourceLimitation[], @@ -38,12 +45,7 @@ export const renderSourceLimitations = ( } >(); for (const { provider, operation, limitation } of limitations) { - const key = JSON.stringify([ - provider.id, - provider.name, - provider.version, - limitation, - ]); + const key = sourceLimitationGroupKey({ provider, limitation }); const group = groups.get(key) ?? { provider, limitation, diff --git a/src/application/WorkflowEvidence.ts b/src/application/WorkflowEvidence.ts index 81d4d928b5..9a8d6528a7 100644 --- a/src/application/WorkflowEvidence.ts +++ b/src/application/WorkflowEvidence.ts @@ -26,6 +26,7 @@ import { UnknownRegistryError } from "../domain/unknownRegistryError.js"; import { workflowUnknownInput } from "./investigation/WorkflowUnknown.js"; import { renderSourceLimitations, + sourceLimitationGroupKey, sourceLimitationKey, type SourceLimitation, } from "./SourceLimitations.js"; @@ -110,12 +111,7 @@ export const executeComposedWorkflow = async ( omittedObservations += 1; continue; } - const group = JSON.stringify([ - fact.provider.id, - fact.provider.name, - fact.provider.version, - limitation, - ]); + const group = sourceLimitationGroupKey(fact); if (!perItemGroups.has(group)) { if ( perItemGroups.size >= budget.maxDistinct ||