Build-an-X workflow that produces a structured risk-acceptance decision document - for risks the team has decided to accept (rather than mitigate / transfer / avoid). Walks the author through the ISO 31000 risk-acceptance criteria (rationale, sign-off, scope, review trigger, exit conditions), captures stakeholder approval, and links to the originating risk register entry. Output is a Markdown decision artefact that lives alongside the risk register and provides audit-defensible justification for the team's acceptance choice. Use when a risk register entry's Strategy column is set to Accept, or an already-accepted risk comes up for its scheduled re-review, an audit, or a post-incident look-back.
79
99%
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
Of the four ISO 31000:2018 risk responses, only Accept produces a decision artefact (Avoid / Mitigate / Transfer all produce work). Accept-without-document is the common failure: the risk is silently de-prioritised, nobody remembers why, and the post-mortem finds no paper trail. This skill closes that gap.
Per ISTQB CTAL-TM ch. 5 on risk-response strategies (cite by stable ID).
Pull the entry from the relevant register:
risk-matrix per-releaseproduct-risk-register-builder product-levelproject-risk-register-builder project-levelCross-reference: risk ID, score, category, current mitigations already in place.
The hardest part. Common defensible rationales:
| Rationale | When applicable | Anti-rationale (do NOT accept this) |
|---|---|---|
| Cost of mitigation > expected loss | Quantified: mitigation costs $100k; expected loss = score × loss-per-incident < $100k | "Mitigation is hard" - without quantification |
| Mitigation degrades user experience | E.g., rate-limiting risk; mitigation = strict throttle, would hurt 95% of users to catch <1% abuse | Without UX measurement |
| Risk is in a deprecated subsystem | Subsystem retiring within N quarters; mitigation effort wasted | "We'll get to it eventually" |
| Risk likelihood demonstrably low | Historical data: 0 incidents in 36 months of comparable systems | Hand-wave likelihood claim |
| Compensating monitoring exists | Real-time alert on the risk's failure mode; can respond fast enough that detect→fix < tolerable downtime | "We'll notice" |
Two questions need explicit answers:
Who signs off? - Authority level should match score:
What scope does the acceptance cover?
A risk acceptance is not permanent. Document the trigger that re-opens the decision:
| Trigger | Example |
|---|---|
| Time | "Re-review at end of Q4 2026" |
| Score change | "Re-review if likelihood ≥ 4 or if any related incident occurs" |
| External event | "Re-review on regulatory change (e.g., new GDPR enforcement guidance)" |
| Architectural change | "Re-review if subsystem moves out of deprecation" |
| Volume threshold | "Re-review when user count crosses 10x current" |
At minimum: time + score-change trigger. Indefinitely-accepted risks (no trigger) are anti-patterns.
Assemble the fields from Steps 1-4 into one versioned Markdown document with these sections, in order: a header (risk, register-entry link, current score, decision, decided-by), Rationale (with the quantified expected-loss analysis), Scope, Sign-off (at the authority Step 3 requires), Review triggers (time + score-change minimum), Compensating controls (named monitors, alerts, runbooks), and a History log.
Two filled examples - a cost-justified acceptance (PR-008) and a high-score S4 security acceptance (R-99) - are in references/example-decisions.md.
Update the risk register entry:
| PR-008 | Legacy CSV import OOM | 3 | 3 | 9 | Accept | See [risk-acceptance-decision-author/PR-008.md](decisions/PR-008.md) | <owner> | Active |And add to the decisions index:
# Risk acceptance decisions - index
| Decision | Risk | Score | Decided | Next review |
|---|---|---:|---|---|
| [PR-008](decisions/PR-008.md) | Legacy CSV import OOM | 9 | YYYY-MM-DD | Q4 2026 |
| [R-22](decisions/R-22.md) | Cyber-week scope-creep risk | 12 | YYYY-MM-DD | Post-launch |
| ... | ... | ... | ... | ... |## Q4 2026 review of PR-008
- Customer count: 14 (was 12 at decision time; +17%)
- OOM events YTD: 0
- Likelihood reassessment: still ~3; no observed increase
- Decision: **Re-accept** until end of Q2 2027
- Re-signed: <names> ✓ YYYY-MM-DD| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Accept without document | Decision rationale lost; auditor finds nothing | Always author a decision per accepted risk |
| Indefinite acceptance (no review trigger) | Risk silently persists into next product cycle | Always set at least time + score-change triggers |
| Sign-off at lower authority than the score warrants | Decisions undocumented at the right level; audit fails | Step 3 authority-matching matrix |
| Hand-wave rationale | "We'll just monitor" without specifics - fails post-mortem | Quantify (cost, probability, compensating control); name specific monitors |
| No compensating controls | Acceptance = "we hope nothing bad happens" | Document detective controls (monitoring, alerts, runbooks) |
| Acceptance hidden in a comment field | Not searchable, not auditable | Versioned Markdown in repo; index file |
product-risk-register-builder,
risk-matrix,
project-risk-register-builder.