Reference

Scoring Table

Complete reference for how Technical Debt Radar calculates debt scores and gate decisions.

Scoring Table

Every violation detected by Radar is assigned debt points. The sum of all points in a PR produces the debt delta score. If the score exceeds the gate threshold, the PR merge is blocked.


Gate Thresholds

MetricDefault ThresholdEffect
debt_delta_score> 15Block merge
debt_delta_score> 8Warn (comment, no block)

These thresholds are configurable in radar.yml under the gates section.


Violation Points (Additions)

Points added to the debt delta score when violations are found.

RulePointsCategoryBlocks?
architecture_violation5ArchitectureYes
circular_dependency10ArchitectureYes
runtime_risk_critical8Runtime RiskYes (Critical)
runtime_risk_warning3Runtime RiskNo
performance_risk_critical8PerformanceYes (XL/XXL)
performance_risk_warning3PerformanceNo
reliability_critical5ReliabilityYes (Critical)
reliability_warning3ReliabilityNo
complexity_point1MaintainabilityConfigurable
missing_tests3MaintainabilityConfigurable
coverage_drop_per_pct2MaintainabilityConfigurable
ai_concern2AI AdvisoryNever

Fix Credits (Deductions)

Points deducted from the debt delta score when violations are fixed in the same PR.

Fix TypePointsDescription
violation_fixed-5Fixed any violation from the baseline
runtime_risk_fixed-8Fixed a runtime risk violation
complexity_reduced-1Reduced cyclomatic complexity per point
reliability_fixed-3Fixed a reliability issue

Fix credits reward developers for cleaning up existing debt. A PR that introduces 8 points of new debt but fixes 10 points of old debt has a net score of -2 (passes the gate).


Score Calculation

debt_delta_score = sum(new_violation_points) + sum(fix_credits)

Example PR:

FindingPoints
1 architecture violation (new)+5
1 unbounded findMany on XL table (new)+8
2 complexity increases of 3 points each (new)+6
Fixed 1 old runtime risk-8
Fixed 1 old reliability issue-3
Total debt_delta_score8

Result: Score of 8 is above the warn threshold (8) but not above the block threshold (15). PR gets a warning comment but is not blocked.


Volume Size Thresholds

Performance violation severity scales with declared data volume:

SizeRow RangePerformance SeverityBlocks?
S0 -- 10KinfoNo
M10K -- 100KwarningNo
L100K -- 1MwarningNo
XL1M -- 50McriticalYes
XXL50M+criticalYes

Volumes are declared in radar.yml:

data_volumes:
  users: M
  orders: L
  events: XL
  audit_logs: XXL

Category Enforcement Summary

CategoryWhen It BlocksDefault Action
ArchitectureAlways (any violation)Block
Runtime RiskCritical severity onlyBlock on Critical
PerformanceXL/XXL tables onlyBlock on XL/XXL
ReliabilityCritical severity onlyBlock on Critical
MaintainabilityConfigurableWarn
AI AdvisoryNeverAdvisory only

Customizing Scores

Override default point values in radar.yml:

scoring:
  architecture_violation: 10    # stricter
  runtime_risk_critical: 12     # stricter
  complexity_point: 0.5         # more lenient
  violation_fixed: -10          # bigger reward for fixes

gates:
  block_merge:
    - metric: debt_delta_score
      operator: ">"
      value: 20                 # more lenient threshold
  warn:
    - metric: debt_delta_score
      operator: ">"
      value: 10
Technical Debt Radar Documentation