From 24afed69c1d4175a838d73ae93609632781199ae Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Tue, 10 Mar 2026 16:47:01 +0100 Subject: [PATCH] Fix Scope evaluation crash: align property names between engine, types, and components The engine used short property names (risk, complexity, assurance, composite) while the ComplianceScores interface defined (risk_score, complexity_score, assurance_need, composite_score). Components used yet another convention (riskScore, level, hardTriggers). The main crash was DEPTH_LEVEL_COLORS[decision.level] where decision.level was undefined (correct property: decision.determinedLevel). Co-Authored-By: Claude Opus 4.6 --- .../app/sdk/compliance-scope/page.tsx | 6 +- .../sdk/compliance-scope/ScopeDecisionTab.tsx | 60 ++++++++++--------- .../sdk/compliance-scope/ScopeOverviewTab.tsx | 12 ++-- .../lib/sdk/compliance-scope-engine.ts | 26 ++++---- 4 files changed, 53 insertions(+), 51 deletions(-) diff --git a/admin-compliance/app/sdk/compliance-scope/page.tsx b/admin-compliance/app/sdk/compliance-scope/page.tsx index a3caa14..4e09ddd 100644 --- a/admin-compliance/app/sdk/compliance-scope/page.tsx +++ b/admin-compliance/app/sdk/compliance-scope/page.tsx @@ -446,13 +446,13 @@ export default function ComplianceScopePage() { {scopeState.decision && ( <>
- Level: {scopeState.decision.level} + Level: {scopeState.decision.determinedLevel}
- Score: {scopeState.decision.score} + Score: {scopeState.decision.scores?.composite_score}
- Hard Triggers: {scopeState.decision.hardTriggers.length} + Hard Triggers: {scopeState.decision.triggeredHardTriggers.length}
)} diff --git a/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx b/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx index 58c56ec..1a0404e 100644 --- a/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx +++ b/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx @@ -99,18 +99,18 @@ export function ScopeDecisionTab({ return (
{/* Level Determination */} -
+
-
- - {decision.level} +
+ + {decision.determinedLevel}
-

- {DEPTH_LEVEL_LABELS[decision.level]} +

+ {DEPTH_LEVEL_LABELS[decision.determinedLevel]}

-

{DEPTH_LEVEL_DESCRIPTIONS[decision.level]}

+

{DEPTH_LEVEL_DESCRIPTIONS[decision.determinedLevel]}

{decision.reasoning && (

{decision.reasoning}

)} @@ -123,11 +123,11 @@ export function ScopeDecisionTab({

Score-Analyse

- {renderScoreBar('Risiko-Score', decision.scores.riskScore)} - {renderScoreBar('Komplexitäts-Score', decision.scores.complexityScore)} - {renderScoreBar('Assurance-Score', decision.scores.assuranceScore)} + {renderScoreBar('Risiko-Score', decision.scores.risk_score)} + {renderScoreBar('Komplexitäts-Score', decision.scores.complexity_score)} + {renderScoreBar('Assurance-Score', decision.scores.assurance_need)}
- {renderScoreBar('Gesamt-Score', decision.scores.compositeScore)} + {renderScoreBar('Gesamt-Score', decision.scores.composite_score)}
@@ -231,16 +231,14 @@ export function ScopeDecisionTab({ )} {/* Hard Triggers */} - {decision.hardTriggers && decision.hardTriggers.length > 0 && ( + {decision.triggeredHardTriggers && decision.triggeredHardTriggers.length > 0 && (

Hard-Trigger

- {decision.hardTriggers.map((trigger, idx) => ( + {decision.triggeredHardTriggers.map((trigger, idx) => (
)}
diff --git a/admin-compliance/components/sdk/compliance-scope/ScopeOverviewTab.tsx b/admin-compliance/components/sdk/compliance-scope/ScopeOverviewTab.tsx index 04b749b..edb6d81 100644 --- a/admin-compliance/components/sdk/compliance-scope/ScopeOverviewTab.tsx +++ b/admin-compliance/components/sdk/compliance-scope/ScopeOverviewTab.tsx @@ -65,26 +65,26 @@ export function ScopeOverviewTab({ scopeState, completionStats, onStartProfiling ) } - const levelColors = DEPTH_LEVEL_COLORS[decision.level] + const levelColors = DEPTH_LEVEL_COLORS[decision.determinedLevel] return (
- {decision.level} + {decision.determinedLevel}

- {DEPTH_LEVEL_LABELS[decision.level]} + {DEPTH_LEVEL_LABELS[decision.determinedLevel]}

-

{DEPTH_LEVEL_DESCRIPTIONS[decision.level]}

+

{DEPTH_LEVEL_DESCRIPTIONS[decision.determinedLevel]}

) } const renderActiveHardTriggers = () => { - if (!decision?.hardTriggers || decision.hardTriggers.length === 0) { + if (!decision?.hardTriggers || decision.triggeredHardTriggers.length === 0) { return null } - const activeHardTriggers = decision.hardTriggers.filter((ht) => ht.matched) + const activeHardTriggers = decision.triggeredHardTriggers.filter((ht) => ht.matched) if (activeHardTriggers.length === 0) { return null diff --git a/admin-compliance/lib/sdk/compliance-scope-engine.ts b/admin-compliance/lib/sdk/compliance-scope-engine.ts index 97b93ab..3a7f020 100644 --- a/admin-compliance/lib/sdk/compliance-scope-engine.ts +++ b/admin-compliance/lib/sdk/compliance-scope-engine.ts @@ -1051,10 +1051,10 @@ export class ComplianceScopeEngine { const composite = riskScore * 0.4 + complexityScore * 0.3 + assuranceScore * 0.3 return { - risk: Math.round(riskScore * 10) / 10, - complexity: Math.round(complexityScore * 10) / 10, - assurance: Math.round(assuranceScore * 10) / 10, - composite: Math.round(composite * 10) / 10, + risk_score: Math.round(riskScore * 10) / 10, + complexity_score: Math.round(complexityScore * 10) / 10, + assurance_need: Math.round(assuranceScore * 10) / 10, + composite_score: Math.round(composite * 10) / 10, } } @@ -1276,9 +1276,9 @@ export class ComplianceScopeEngine { ): ComplianceDepthLevel { // Score-basiertes Level let levelFromScore: ComplianceDepthLevel - if (scores.composite <= 25) levelFromScore = 'L1' - else if (scores.composite <= 50) levelFromScore = 'L2' - else if (scores.composite <= 75) levelFromScore = 'L3' + if (scores.composite_score <= 25) levelFromScore = 'L1' + else if (scores.composite_score <= 50) levelFromScore = 'L2' + else if (scores.composite_score <= 75) levelFromScore = 'L3' else levelFromScore = 'L4' // Höchstes Level aus Triggers @@ -1650,12 +1650,12 @@ export class ComplianceScopeEngine { step: 'score_calculation', description: 'Risikobasierte Score-Berechnung aus Profiling-Antworten', factors: [ - `Risiko-Score: ${scores.risk}/10`, - `Komplexitäts-Score: ${scores.complexity}/10`, - `Assurance-Score: ${scores.assurance}/10`, - `Composite Score: ${scores.composite}/10`, + `Risiko-Score: ${scores.risk_score}/10`, + `Komplexitäts-Score: ${scores.complexity_score}/10`, + `Assurance-Score: ${scores.assurance_need}/10`, + `Composite Score: ${scores.composite_score}/10`, ], - impact: `Score-basiertes Level: ${this.getLevelFromScore(scores.composite)}`, + impact: `Score-basiertes Level: ${this.getLevelFromScore(scores.composite_score)}`, }) // 2. Hard Trigger Evaluation @@ -1675,7 +1675,7 @@ export class ComplianceScopeEngine { step: 'level_determination', description: 'Finales Compliance-Level durch Maximum aus Score und Triggers', factors: [ - `Score-Level: ${this.getLevelFromScore(scores.composite)}`, + `Score-Level: ${this.getLevelFromScore(scores.composite_score)}`, `Trigger-Level: ${this.getMaxTriggerLevel(triggers)}`, ], impact: `Finales Level: ${level}`,