Skip to content

Commit b993ea9

Browse files
baocinclaude
andcommitted
Invert scoring system: 100 = safe, 0 = dangerous
Changed run risk scoring from additive (0+penalties) to subtractive (100-penalties) so higher scores indicate safer repositories. - Score 100 = no issues (safe) - Score 90-99 = minimal risk (A grade, like 1 info-leak finding) - Score 0-39 = critical danger (F grade) Updated weights: info-leak -1pt, critical -5pt, high -3pt, medium -2pt, low -1pt. Adjusted RiskGrade thresholds and color coding to match. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 053c022 commit b993ea9

2 files changed

Lines changed: 27 additions & 27 deletions

File tree

internal/githttp/handler.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -672,17 +672,15 @@ func (h *Handler) writeScanReport(sb *SidebandWriter, report *ReportWriter, pars
672672
report.WriteBoxTop(width)
673673

674674
// Run Risk Score - prominent display
675+
// Higher scores are better (100 = safe, 0 = dangerous)
675676
grade := scanner.RiskGrade(scan.SecurityScore)
676677
var scoreColor string
677678
var scoreIcon string
678679
switch {
679-
case scan.SecurityScore == 0:
680+
case scan.SecurityScore >= 90:
680681
scoreColor = Green
681682
scoreIcon = "✓"
682-
case scan.SecurityScore <= 30:
683-
scoreColor = Yellow
684-
scoreIcon = "⚠"
685-
case scan.SecurityScore <= 60:
683+
case scan.SecurityScore >= 60:
686684
scoreColor = Yellow
687685
scoreIcon = "⚠"
688686
default:

internal/scanner/scanner.go

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -117,42 +117,44 @@ type Result struct {
117117
PartialReason string // Why partial: "timeout", "cancelled", etc.
118118
}
119119

120-
// RunRiskWeights defines risk points added per severity level
120+
// RunRiskWeights defines risk points deducted per severity level
121+
// Score starts at 100 (perfect) and decreases with findings
121122
var RunRiskWeights = map[string]int{
122-
"info-leak": 50, // +50 risk per info leak (immediate danger to cloner)
123-
"critical": 20, // +20 risk per critical finding
124-
"high": 10, // +10 risk per high finding
125-
"medium": 3, // +3 risk per medium finding
126-
"low": 1, // +1 risk per low finding
127-
"info": 0, // info findings don't affect risk
123+
"info-leak": 1, // -1 point per info leak (immediate danger to cloner)
124+
"critical": 5, // -5 points per critical finding
125+
"high": 3, // -3 points per high finding
126+
"medium": 2, // -2 points per medium finding
127+
"low": 1, // -1 point per low finding
128+
"info": 0, // info findings don't affect score
128129
}
129130

130131
// CalculateRunRisk computes a 0-100 run risk score based on findings
131-
// 0 = safe to run, 100 = extremely dangerous to execute
132+
// 100 = safe to run (no issues), 0 = extremely dangerous to execute
132133
func CalculateRunRisk(infoLeak, critical, high, medium, low int) int {
133-
risk := 0
134-
risk += infoLeak * RunRiskWeights["info-leak"]
135-
risk += critical * RunRiskWeights["critical"]
136-
risk += high * RunRiskWeights["high"]
137-
risk += medium * RunRiskWeights["medium"]
138-
risk += low * RunRiskWeights["low"]
134+
score := 100
135+
score -= infoLeak * RunRiskWeights["info-leak"]
136+
score -= critical * RunRiskWeights["critical"]
137+
score -= high * RunRiskWeights["high"]
138+
score -= medium * RunRiskWeights["medium"]
139+
score -= low * RunRiskWeights["low"]
139140

140-
if risk > 100 {
141-
risk = 100
141+
if score < 0 {
142+
score = 0
142143
}
143-
return risk
144+
return score
144145
}
145146

146147
// RiskGrade returns a letter grade for the run risk score
148+
// Higher scores are better (100 = perfect, 0 = dangerous)
147149
func RiskGrade(risk int) string {
148150
switch {
149-
case risk == 0:
150-
return "A" // Safe
151-
case risk <= 10:
151+
case risk >= 90:
152+
return "A" // Safe - minimal or no issues
153+
case risk >= 80:
152154
return "B" // Low risk
153-
case risk <= 30:
155+
case risk >= 60:
154156
return "C" // Medium risk
155-
case risk <= 60:
157+
case risk >= 40:
156158
return "D" // High risk
157159
default:
158160
return "F" // Dangerous - do not run

0 commit comments

Comments
 (0)