File size: 913 Bytes
5f77ac0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import logging

from scanner.domain.models import ScanReport

logger = logging.getLogger(__name__)


class DiffDetector:
    """Detects meaningful changes between consecutive scans.

    Outputs human-readable diff summaries:
    - Score changes (including direction)
    - New findings by category
    - Resolved findings
    - Severity escalations
    """

    def detect(self, previous: dict | None, current: ScanReport) -> str | None:
        if previous is None:
            return None

        prev_score = previous.get("last_risk_score", 0)
        curr_score = current.risk_score
        delta = curr_score - prev_score

        if delta == 0:
            return None

        direction = "increased" if delta > 0 else "decreased"
        return (
            f"Risk score {direction} from {prev_score} to {curr_score} "
            f"({'+' if delta > 0 else ''}{delta}) — {current.summary}"
        )