diff --git a/src/application/ReconstructionObligationLedgerEvaluation.ts b/src/application/ReconstructionObligationLedgerEvaluation.ts index 4123d067bb..cf6fb9018f 100644 --- a/src/application/ReconstructionObligationLedgerEvaluation.ts +++ b/src/application/ReconstructionObligationLedgerEvaluation.ts @@ -181,6 +181,7 @@ const evaluateObligation = ( ): ReconstructionObligation => { const bindings = context.bindings.get(candidate.obligation_id) ?? []; const binding = bindings.length === 1 ? (bindings[0] ?? null) : null; + const originalCases = originalCasesFor(candidate, binding); const diagnostics: Diagnostic[] = []; if (candidate.definitionCount > 1) addDiagnostic( @@ -203,9 +204,9 @@ const evaluateObligation = ( if (binding !== null) evaluateBinding(candidate, binding, context, diagnostics); diagnostics.push( - ...originalCaseDiagnostics(candidate, binding, context.evidence), + ...originalCaseDiagnostics(candidate, originalCases, context.evidence), ); - evaluateAuthority(candidate, binding, context, diagnostics); + evaluateAuthority(candidate, originalCases, context, diagnostics); evaluateDisposition(candidate, diagnostics); diagnostics.push( ...contradictionDiagnostics( @@ -232,7 +233,7 @@ const evaluateObligation = ( target: candidate.target, authority_references: candidate.authority_references, source_state: candidate.source_state, - observed_cases: originalCasesFor(candidate, binding), + observed_cases: originalCases, required: candidate.required, required_case_kinds: candidate.required_case_kinds, required_original_authority: candidate.required_original_authority, @@ -407,7 +408,7 @@ const evaluateVerifier = ( const evaluateAuthority = ( candidate: ReconstructionObligationCandidate, - binding: Binding | null, + originalCases: ReconstructionObligation["observed_cases"], context: EvaluationContext, diagnostics: Diagnostic[], ): void => { @@ -426,18 +427,16 @@ const evaluateAuthority = ( ); }, ); - const caseSatisfied = originalCasesFor(candidate, binding).some( - ({ evidence_id: evidenceId }) => { - const evidence = context.evidence.get(evidenceId); - return ( - evidence !== undefined && - evidenceSupportsOriginalAuthority( - evidence, - candidate.required_original_authority, - ) - ); - }, - ); + const caseSatisfied = originalCases.some(({ evidence_id: evidenceId }) => { + const evidence = context.evidence.get(evidenceId); + return ( + evidence !== undefined && + evidenceSupportsOriginalAuthority( + evidence, + candidate.required_original_authority, + ) + ); + }); const satisfied = referenceSatisfied || caseSatisfied; if (!satisfied) addDiagnostic( diff --git a/src/application/ReconstructionObligationOriginalCases.ts b/src/application/ReconstructionObligationOriginalCases.ts index 0c180214bc..d2a74cc24d 100644 --- a/src/application/ReconstructionObligationOriginalCases.ts +++ b/src/application/ReconstructionObligationOriginalCases.ts @@ -31,11 +31,10 @@ export const originalCasesFor = ( /** Report original cases that are absent or lack comparable Evidence authority. */ export const originalCaseDiagnostics = ( candidate: ReconstructionObligationCandidate, - binding: Binding | null, + originalCases: ReconstructionObligation["observed_cases"], evidenceById: ReadonlyMap, ): Diagnostic[] => { const diagnostics: Diagnostic[] = []; - const originalCases = originalCasesFor(candidate, binding); // Retain optional case rows, but never leave one of their Evidence links // unresolved merely because its kind is not required for closure. for (const { kind, evidence_id: evidenceId } of originalCases)