File size: 2,853 Bytes
81e3673
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python3
"""Compare final coverage to baseline for Phase 127."""
import json
from pathlib import Path

# Load baseline
baseline_path = Path("tests/coverage_reports/metrics/phase_127_baseline.json")
with open(baseline_path) as f:
    baseline = json.load(f)

# Load final coverage
final_path = Path("tests/coverage_reports/metrics/phase_127_final_coverage.json")
with open(final_path) as f:
    final = json.load(f)

# Extract overall percentages
baseline_pct = baseline["totals"]["percent_covered"]
final_pct = final["totals"]["percent_covered"]
improvement = final_pct - baseline_pct

# Extract per-module improvements
module_improvements = {}
for file_path in final["files"]:
    # File paths don't have "backend/" prefix in coverage JSON
    baseline_file = baseline["files"].get(file_path, {})
    final_file = final["files"][file_path]

    baseline_module_pct = baseline_file.get("summary", {}).get("percent_covered", 0)
    final_module_pct = final_file.get("summary", {}).get("percent_covered", 0)
    module_improvement = final_module_pct - baseline_module_pct

    if module_improvement > 0:
        module_improvements[file_path] = {
            "baseline": round(baseline_module_pct, 2),
            "final": round(final_module_pct, 2),
            "improvement": round(module_improvement, 2)
        }

# Sort by improvement
sorted_improvements = sorted(
    module_improvements.items(),
    key=lambda x: x[1]["improvement"],
    reverse=True
)

# Generate comparison result
result = {
    "phase": "127",
    "baseline_coverage": round(baseline_pct, 2),
    "final_coverage": round(final_pct, 2),
    "improvement": round(improvement, 2),
    "target_coverage": 80.0,
    "target_met": final_pct >= 80.0,
    "gap_to_target": max(0, round(80.0 - final_pct, 2)),
    "total_files_measured": len(final["files"]),
    "files_improved": len(module_improvements),
    "top_improvements": [
        {"file": k, **v} for k, v in sorted_improvements[:10]
    ]
}

# Write result
output_path = Path("tests/coverage_reports/metrics/phase_127_improvement_summary.json")
output_path.parent.mkdir(parents=True, exist_ok=True)
with open(output_path, "w") as f:
    json.dump(result, f, indent=2)

# Print summary
print(f"\n{'='*60}")
print(f"PHASE 127: BACKEND FINAL COVERAGE")
print(f"{'='*60}")
print(f"Baseline:  {baseline_pct:.2f}%")
print(f"Final:     {final_pct:.2f}%")
print(f"Gain:      {improvement:+.2f} percentage points")
print(f"Target:    80.0%")
print(f"Status:    {'✓ MET' if result['target_met'] else '✗ NOT MET'} ({result['gap_to_target']:.2f} pp gap)")
print(f"\nFiles improved: {len(module_improvements)}")
print(f"\nTop 10 improvements:")
for item in result["top_improvements"]:
    print(f"  {item['file']}: {item['baseline']:.1f}% → {item['final']:.1f}% ({item['improvement']:+.1f} pp)")
print(f"{'='*60}\n")