Almirah renders risk management the same way it renders everything else: risks are Markdown files in a risks/<register>/ folder, and the register — with computed risk priority numbers, colour bands, and links into the requirements — is generated from them.
A register is declared in project.yml: which folder it lives in, which record sections appear as columns, and how the risk priority number (RPN) is computed:
risks:
- folder: fmea
columns: [Failure Mode, Severity, Occurrence, Detection, Mitigation, Affected Documents, Status]
rpn:
- name: Initial
inputs: [Severity, Occurrence, Detection]
thresholds:
acceptable: 50
unacceptable: 200
- name: Residual
inputs: [Residual Severity, Residual Occurrence, Residual Detection]
thresholds:
acceptable: 50
unacceptable: 200Each RPN group multiplies the values of its input sections. The thresholds drive the colour coding: at or below acceptable is green, at or above unacceptable is red, and the band between is amber. A group with a single input (for example, a precomputed CVSS score) is surfaced unchanged — no product is computed.
A risk record is a Markdown file whose sections carry the data: a Status history table (Identified, Analysed, Mitigating, Accepted, Closed — current status marked with *), the descriptive sections your methodology calls for, one numeric section per RPN input, and the traceable tail — an Affected Documents controlled table linking the proposed controls up to requirements, plus a Monitoring section:
# Severity
9
# Occurrence
4
# Detection
6A record without residual scores simply leaves its Residual cell blank in the register — an honest picture of what is mitigated and what is not.
The RPN configuration is generic enough to express very different risk approaches — each of these is a live demo:
Nothing new to learn — a register is part of the ordinary build:
$ almirah please my_project
parsing specifications ..... 2 ok
parsing risk records ....... 5 ok
risk links ................. 5 ok
rendering HTML ............. my_project/build/index.htmlThe register table, the colour-coded RPN columns, the per-record pages, and the links between risks and requirements all appear in the rendered output. Records whose status is not Closed count as open in the registries summary — your open-risk list is always one build away.