File size: 1,602 Bytes
fc2988c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
35
36
37
38
39
40
41
42
43
44
45
46
"""
Semantic Diff Engine.
Normal diff tells you WHAT changed.
This tells you WHAT IT MEANS that it changed.
"""
from vitalis_ide.math_core.kernel import VitalisKernel

class SemanticDiff:
    DRIFT_THRESHOLD = 0.3

    def __init__(self):
        self.kernel = VitalisKernel()

    def diff(self, code_before: str, code_after: str) -> dict:
        vec_before = self.kernel.vectorize_source(code_before)
        vec_after  = self.kernel.vectorize_source(code_after)
        similarity = self.kernel.similarity(vec_before, vec_after)
        drift = 1.0 - similarity

        if drift < 0.05:
            verdict = "TRIVIAL"
            description = "Cosmetic change only. Logic unchanged."
        elif drift < self.DRIFT_THRESHOLD:
            verdict = "MINOR"
            description = "Minor semantic shift. Core logic preserved."
        elif drift < 0.6:
            verdict = "SIGNIFICANT"
            description = "Significant semantic drift. Logic has changed."
        else:
            verdict = "BREAKING"
            description = "Near-complete semantic rewrite. Treat as new module."

        return {
            "similarity": round(similarity, 4),
            "drift": round(drift, 4),
            "verdict": verdict,
            "description": description,
        }

    def diff_files(self, path_before: str, path_after: str) -> dict:
        with open(path_before) as f: before = f.read()
        with open(path_after)  as f: after  = f.read()
        result = self.diff(before, after)
        result["files"] = {"before": path_before, "after": path_after}
        return result