The risk-based testing (RBT) umbrella: risk matrix and risk register authoring, likelihood x impact scoring, risk storming, calibration, and risk-to-test coverage mapping. Produces the per-feature / per-release matrix artifact (structured intake: feature, category, impact 1-5 by likelihood 1-5, score; heatmap; mitigations with owners and due dates), supporting lightweight and heavyweight (FMEA / Cost of Exposure) methods per RBT canon, plus a risk coverage mapping workflow that proves which tests, cases, or monitors back each registered risk. references/ carries the product-risk and project-risk register variants, the risk-storming facilitation guide, matrix calibration against observed defect data, and a register review checklist. Use for any risk-based-testing artifact: building a matrix or register, running a risk-storming session, calibrating ratings against defects, or mapping risks onto test coverage.
69
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Deep reference for the risk-matrix SKILL.md. A hygiene checklist for auditing a risk register (per-release matrix or product register) for assessment quality before release planning or a quarterly review. Blocks substandard risk assessments from driving release planning.
Inputs: the register under review, optionally the coverage matrix from the SKILL.md coverage mapping section, and the decisions folder for accepted risks. Output: per-risk findings + a single register-level verdict (pass / block / pass-with-caveats).
Every entry must have:
| Field | Required? | BLOCK if missing? |
|---|---|---|
| ID | ✓ | ✓ |
| Risk title | ✓ | ✓ |
| Category | ✓ | ✓ |
| Impact (1-5) | ✓ | ✓ |
| Likelihood (1-5) | ✓ | ✓ |
| Score | ✓ | ✓ (computed = I × L) |
| Strategy (Avoid / Mitigate / Transfer / Accept) | ✓ | ✓ |
| Mitigation OR decision link | ✓ | ✓ |
| Owner | ✓ | ✓ |
| Last review date | ✓ | ✓ |
Impact + likelihood must be independently scored, not auto-equated:
def check_independence(risks):
issues = []
pairs = [(r["impact"], r["likelihood"]) for r in risks]
diag_count = sum(1 for i, l in pairs if i == l)
if len(pairs) > 5 and diag_count / len(pairs) > 0.7:
issues.append(
f"{diag_count}/{len(pairs)} risks have impact == likelihood. "
"Likely auto-equated; force independent scoring."
)
return issuesIf >70% of risks have impact == likelihood, the register is suspect
(the same principle as scoring defect severity and priority independently).
For each "Accept" decision, verify a written acceptance-decision memo exists (who accepted, what evidence, expiry / revisit date). Any Accept without a linked decision document = BLOCK.
For each "Transfer" decision, verify the receiving party (insurance / vendor / SLA) is named. Without it, "Transfer" is hand-wave Accept.
Build the coverage matrix per the SKILL.md coverage mapping section, then:
orphans_critical = [r for r in matrix if r["coverage_depth"] == 0 and r["score"] >= 15]
orphans_high = [r for r in matrix if r["coverage_depth"] == 0 and 10 <= r["score"] < 15]Risks scoring ≥15 must have escalation evidence:
| Score | Required escalation |
|---|---|
| 15-19 | Engineering director or equivalent named in owner / reviewer field |
| 20-25 | VP / CTO / CISO sign-off recorded in review log |
Without it, the register has under-escalated risks = caveat.
Per the register type:
| Register | Cadence | Stale after |
|---|---|---|
| Per-release matrix (SKILL.md) | Weekly during sprint | 14 days |
| Product register (product-risk-register.md) | Quarterly | 100 days |
| Project register (project-risk-register.md) | Weekly | 14 days |
If most entries' last_review is older than the threshold, the
register is stale.
# Risk-register audit - Q2 2026 release matrix - YYYY-MM-DD
**Risks audited:** 27 active + 4 retired
**Findings:** 6 critical, 9 warnings
**Verdict:** BLOCK - 3 critical findings require fix before release
## Critical (must fix before release planning)
| # | Risk ID | Finding |
|---|---|---|
| 1 | R-14 | Strategy "Accept" without linked decision document |
| 2 | R-22 | Score 20 (impact 5 × likelihood 4); coverage depth 0 (ORPHAN). No test, no monitor, no decision. |
| 3 | PR-009 | Score 16; last review 137 days ago (stale for product register; threshold 100 d) |
## Warnings
| Risk ID | Finding |
|---|---|
| R-08 | impact 3 = likelihood 3 = score 9; pattern repeats for 19/27 entries - likely auto-equated |
| PR-003 | Strategy "Transfer" but recipient not named |
| R-11 | Owner field empty |
| ... | ... |
## Coverage integration
- 4 of 27 risks are orphan (no coverage). Of these:
- 2 critical (score ≥15) - BLOCK above
- 2 low (score <10) - info
## Acceptance decisions integration
- 3 Accept decisions found. 2 have linked documents (R-08, R-12);
1 missing (R-14 - BLOCK above)
## Review cadence
- Average `last_review`: 18 days
- Stale entries (>14 days for release matrix): 7 of 27
- Most-stale: PR-009 at 137 days
## Action items
1. **R-14**: Either author the acceptance decision memo or change
strategy to Mitigate / Transfer.
2. **R-22**: Add at least one mitigation + one test before release.
3. **PR-009**: Re-review now; update `last_review` date.
After fixes, re-run this checklist.A register review never returns "pass" when any of these hold:
The review reports and recommends; it never auto-fixes register fields.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Auditing only critical-score orphans | Medium-score risks accumulate coverage debt | Run all 7 checks |
| Treating "Accept" as default for inconvenient risks | Decision discipline collapses | Require documented decisions per acceptance |
| Skipping the independence check | Auto-equated scores produce misleading priorities | Always run Check 2 |
| Auditing once per release only | Risks drift between release cycles | Audit weekly for release matrices |
| Score thresholds different per team | Cross-team metrics meaningless | Standardise the threshold table; audit against it |
| Reviewers in owner column for "accountability" | Owner ≠ reviewer; concentrates blame | Distinguish owner from reviewer fields |