Risk model: how likelihood and impact grades are computed

Grades are computed by a script from accepted public reports and are never typed by hand. The model produces two grades per incident type and no single score.

risk model version 1.0.0

Likelihood

Input: accepted primary and secondary reports for the incident published in the last 5 years, counted once per organisation.

Reports in 5 yearsGrade
6 or morehigh
3 to 5medium
2low
fewer than 2not published

Label: "Likelihood: grade (n public reports in 5 years)". An incident page can be published with one recent report and older reports from a second organisation; its likelihood then reads "not published".

Impact

Input: the impact class each accepted report states: availability, data, money, compliance, degraded or unstated. Unstated reports are ignored.

Majority of reports with a stated impactGrade
data, money or compliancehigh
availabilitymedium
degradedlow
fewer than 2 reports state impactunrated

Label: "Impact: grade (k of n reports: dominant class)". A tie between grades resolves to the higher grade.

Time to detection

Recorded only when a report states both the change time and the detection time. Group pages print the median with the count behind it and exclude values above the site-wide 95th percentile. An incident with fewer than 2 values prints no figure.

Current grid

Risk grid: count of incident types per likelihood and impact cell, from data/risk.json
Likelihood \ ImpactImpact: highImpact: mediumImpact: low
Likelihood: high000
Likelihood: medium1151
Likelihood: low7194
Impact unrated or likelihood not graded11
Table equivalent: incidents per cell
IncidentLikelihoodImpact
Alerts silent after metric renamelowunrated
All sessions invalidatedmediummedium
Analytics event schema brokenlowhigh
API key rotation breaks integrationsnot-publishedmedium
API version dropped while old app livenot-publishedmedium
App store rollback not possiblemediummedium
Asset cache serves old bundlemediummedium
Autoscaling policy misconfiguredmediummedium
Background job queue backlogmediumlow
Cache invalidation stormlowmedium
Certificate expiredmediummedium
Checkout blocked for segmentlowhigh
Cold start latency regressionlowlow
Config change without restart semanticslowmedium
Connection pool exhaustedmediummedium
Container image base changelowmedium
CORS policy blocks frontendmediummedium
Crash on older OS versionlowmedium
Critical path broken in one browserlowmedium
CSP blocks required scriptlowmedium
Deep link broken after routing changelowmedium
Dependency removed from registrynot-publishedmedium
Disk full from new log volumelowmedium
DNS change propagation outagemediummedium
Double charge after deploynot-publishedhigh
Email or SMS provider template brokennot-publishedmedium
Encoding or timezone shiftnot-publishedhigh
Environment mismatch: production points to staginglowunrated
Error budget burned by retry stormlowmedium
Flag default flips on missing configlowlow
Flag enabled for wrong segmentlowmedium
Form submission silently failsnot-publishedhigh
IAM policy change blocks servicemediummedium
In-app purchase receipt validation failslowhigh
Irreversible migration fails midwaylowmedium
Localisation strings missinglowlow
Long-running migration locks tablelowmedium
Memory leak in new releaselowmedium
Missing index after migrationmediummedium
OAuth callback URL not whitelistedlowmedium
ORM upgrade changes query semanticslowhigh
Partial rollback leaves inconsistent statelowlow
Password reset link brokenlowmedium
Permission escalation via role changemediumhigh
Provider API change breaks contractmediummedium
Push notification token resetlowmedium
Rate limit misconfiguredmediummedium
Release marker missing in monitoringnot-publishedmedium
Rollback fails due to forward-only changelowmedium
Rolling deploy mixed versionsnot-publishedmedium
Schema drift between servicesmediummedium
SDK upgrade changes behaviourmediummedium
Soft-delete flag ignoredlowhigh
SSO login brokenmediummedium
Subscription renewal skippedlowhigh
Tax calculation regressionlowhigh
Third-party rate limit hitlowmedium
Thundering herd on restartlowmedium

What the model does not do

It does not weight by company size, industry or opinion. It does not produce a single score. It does not rank incidents against each other beyond the grid cells.