Risk Assessment Ecosystem
User manual · Configurator v1.62 · Assessor v3.6.1 · June 2026
1 · The ecosystem
The ecosystem is two single-file HTML applications plus a library of JSON configuration files. Everything runs locally in your browser — no server, no install, no data leaves your machine unless you explicitly use an AI feature.
risks, surveys, controls, matrix
risk-register-configportable, versioned
scope → surveys → controls → output
Print/PDF · AI analysis
The Configurator is for the method owner: it defines what gets assessed (the risk map), what evidence is collected (scoping questions, vendor and internal surveys), what reduces risk (controls), and how numbers become ratings (matrix, bands, scoring options). The Assessor is for the person running an individual assessment: it loads a config and walks through an 8-step pipeline, computing live risk ratings as answers arrive.
2 · Quick start
- Open
Risk-assessor.htmlin a browser. - Drop a config file onto the landing screen — e.g.
configs/full-AI-risk-assessment.jsonor any starter pack fromconfigs/. - Fill in Metadata (project, organisation, assessor).
- Answer the Scope questions. Risks tied to a "No" are scoped out.
- Answer the Vendor and Internal surveys — these reduce the likelihood of well-managed risks.
- Rate the Controls — these produce the residual position.
- Review the Output heatmap; export Markdown / JSON / CSV or Print/PDF.
.json session file — the config is embedded, so one file restores everything. For security-sensitive work, the topbar Autosave ON/OFF toggle stops all background writes (see §12).3 · Risk Configurator
Landing page (v1.58)
The configurator opens with four paths: 🧱 brand-new empty configuration (one placeholder family × one period, zero risks/questions/controls — build everything from scratch; matrix and scoring start from defaults), 🗂 start from the default register (the built-in 77-risk standard map), ↑ open an existing config file (the canvas behind the dialog starts empty, not the default register), or load a predefined template from the gallery of all bundled risk maps.
Templates load automatically with zero prompts, even from disk: a companion file configs/packs-bundle.js carries all 23 bundled configs and loads via a script tag, which browsers permit on file:// (unlike fetch). Over http the live JSON files are preferred, so edits show without rebuilding. After adding or editing a pack, refresh the bundle with node build-packs-bundle.js from the tests/ folder. ↺ Reset returns to the landing page.
ℹ Config descriptions (v1.58)
Every template card on the landing carries an ℹ button, and the in-app Configuration label has one too. Both open a floating window with the configuration's full details read from the JSON: label, version, risk/control/survey counts, narrative, the long-form description, families and periods. Esc or click-outside closes it. The description field survives load → Save Config round-trips.
Eight tabs, in the order you would normally work:
| Tab | What it does |
|---|---|
| Risk Register | The families × periods grid. Click a tile to edit a risk: name, meaning, mitigation, base score (1–10), strategy %, optional base likelihood, and per-risk appetite (1–9). Risks can be deactivated or suppressed (blank cell). To add a new risk: click any empty dashed cell ("+ add risk") — the editor opens with a blank template for that family/period slot; give it a name and save. Then link it to scoping questions, surveys and controls in the other tabs (click the new tile in each tab's mini-map to connect items). To add a family or period: use the + Family / + Period buttons above the grid — a family needs a 2–4 letter abbreviation (the risk ID prefix) and a name; a period needs a code (P4, P5, …) and a label. The new column/row appears with empty cells ready for risks. Existing family/period headers are edited by clicking them. |
| Scoping Questions | Yes/No questions with an ifNo list — the risks scoped out when the answer is No. |
| Vendor / Internal Survey | Weighted evidence questions linked to risks. Good answers reduce the likelihood of the linked risks in the assessor. |
| Controls | Controls linked to risks, each with a type (Design/Operational/Contractual), an effect (Likelihood, Impact, Both, Detective, Governance), a weight, and optional framework refs. |
| Risk Matrix | The 5×5 matrix (click a cell to cycle its band), score/likelihood/impact band thresholds, the TPRA method and target axis, and the Scoring Options card (unanswered handling, reduction caps). |
| AI Prompt | The system prompt shipped inside the config for AI analysis in the assessor. |
| Help | Built-in guide and the JSON schema reference. |
Top-bar tools
- ✨ Copilot — describe a use case; an LLM drafts a starter config (clearly labelled AI DRAFT) that you can load or download. Always run Validate and review before use.
- ✔ Validate — integrity checks: duplicate IDs, orphan references, risks without controls or surveys, risks no scope question can suppress, unlinked questions/controls, uniform appetites, and matrix label-vs-points contradictions. ERROR / WARN / INFO findings.
- Save Config — writes the full config including the
resolvedblock the assessor reads.
4 · Risk Assessor
An 8-step pipeline. Steps turn green as their relevant questions are completed.
| Step | Purpose |
|---|---|
| 0 · Metadata | Project, organisation, assessor, date, scope description. |
| 1 · Risk Map | Read-only view of all active risks, scores and appetites. |
| 2 · Scope | Yes / No / N/A / Do not know. "No" scopes risks out. "Do not know" keeps risks in scope and raises a visible uncertainty flag on the Output step and in exports. |
| 3 · Vendor survey | Vendor security posture. Supports blank-survey export → vendor fills offline → import, and ✨ AI pre-fill from pasted evidence. |
| 4 · Internal survey | Same flow for your internal posture. |
| 5 · Controls | Rate each control Yes / Partial / No / N/A, attach notes and evidence references, and add custom controls per risk. |
| 6 · Output | Heatmap with five view modes, per-risk popup (score cards, calculation trace, overrides, treatment plan), exports, Print/PDF, ⇄ session comparison, ✨ AI treatment suggestions. |
| 7 · AI Prompt | Edit the analysis prompt; ⎘ Copy AI package; ✨ Generate AI report via your own API key. |
Landing screen (v3.4)
The assessor landing is assessment-only: load a config exported by the configurator (drop zone or file picker), resume a saved assessment, or restore an autosaved session. The bundled-config gallery lives on the configurator's landing page — pick a preconfigured risk map there, tailor it, Save Config, then load that file here.
Comparing two assessments (v3.2)
⇄ Compare session on the Output step loads a previously saved session file and shows per-risk residual deltas: improved, worsened, newly in scope, and dropped out — the basis for reassessment cycles and trend reporting. Risks are matched by ID; a warning appears if the sessions used different configs.
Keyboard answering (v3.2)
Tab or click onto a question/control card, then press Y (Yes), P (Partial), N (No), A (N/A) or D (Do not know — scope only). ↑/↓ move between cards, Enter/Space toggles a focused controls section, Esc closes modals. The step pipeline shows answer percentages, and the Controls step has Expand-all / Collapse-all.
Guided mode (v3.3)
Business-language coaching on every step: how to answer like an auditor, what weights mean, when to scope risks out, what the heatmap modes tell you. On by default for new users; dismiss tips individually (✕) or switch the layer off in Settings → Guided help. The configurator has the same layer behind the 💡 Tips topbar button, including a live hint in the risk editor showing which business impact band a score lands in.
What-if simulator (v3.3)
🧪 Simulate controls in the risk popup sandboxes the control answers for that risk — change them freely and watch the simulated residual move; nothing touches the assessment until you press Apply (or Discard / close the popup). 🧪 Opportunities on the Output step ranks the not-yet-implemented controls by the total residual-points reduction each would buy across its linked risks — a control-investment priority list.
Evidence assurance (v3.3)
Of the controls credited Yes/Partial, how many carry an evidence reference? The percentage appears on the Output step and per risk in the popup, with an "Evidence Assurance" section in the Markdown export (listing unevidenced credited controls), an assurance block in JSON, and an "Assurance %" column in CSV. Optional anti-gaming mode: set scoring.unevidencedYes to partial in the configurator's Scoring Options and an unevidenced Yes only earns Partial credit.
5 · How scoring works
The engine is a qualitative 5×5 model driven by one calculation pipeline. All scores live on two scales: risk scores 1–10 (configurator) and points 1–100 (assessor, = score × 10).
fullScore = clamp( baseScore × (1 + strategyPct/100), 1, 10 ) ← configurator tpra = vendor security rating normalised to ×0.80 … ×1.20 ← optional adjusted = clamp( fullScore × tpra, 1, 10 ) (vendor-linked risks; axis is configurable) impactPts = adjusted × 10 (1–100) likeBase = baseLikelihood × 10 if set per risk — otherwise = impactPts surveyScore = Σ answer points / Σ weights over answered linked questions (N/A excluded) likelihoodPts = likeBase × (1 − surveyScore% × surveyMaxReduction) default cap 60% CURRENT = matrix[ impactBand ][ likelihoodBand ] → label + points ctrlScore = Σ answer points / Σ weights over rated linked controls (N/A excluded) likelihood controls (effect ≠ Impact) reduce likelihoodPts up to controlMaxReduction (80%) impact controls (Impact or Both) reduce impactPts up to controlMaxReduction (80%) RESIDUAL = matrix lookup on the reduced points
Answer scoring
| Answer | Effect |
|---|---|
| Yes | Full weight (good posture / effective control). |
| Partial | Half weight (by default). |
| No | Zero. |
| N/A | Excluded entirely — does not count for or against the score. |
| Unanswered | Excluded by default; with scoring.unansweredAs = "zero" it counts as worst-case (anti-gaming mode). |
scoring block: surveyMaxReduction (default 0.60) and controlMaxReduction (default 0.80). At 100% effectiveness with defaults, controls reduce likelihood far enough to guarantee a LOW residual rating.Control effects
| Effect | Reduces | Examples |
|---|---|---|
| Likelihood | Likelihood | Hardening, validation, least privilege, training |
| Impact | Impact | Rollback, kill-switch, fallback, indemnities, spares |
| Both | Likelihood + impact | Segmentation, human review gates, output filtering |
| Detective | Likelihood or impact (configurable) | Monitoring, logging, alerting, drift detection |
| Governance | Likelihood | Ownership, policy, approval gates |
scoring.detectiveAffects (assessor v3.2+, configurator v1.54+): likelihood (legacy default) or impact — detection rarely prevents an event, it limits how far it spreads. Set it in the configurator's Scoring Options card.6 · Heatmaps & view modes
The heatmap is a families × periods grid — each cell is one risk. Cell colour is the matrix rating of that risk in the selected mode. Click a cell for the full popup: three score cards, a calculation trace, band overrides, the treatment plan, and inline control answers.
| Mode | Meaning |
|---|---|
| Inherent (raw) | Config scores only. No vendor rating, no surveys, no controls. Likelihood = impact unless a per-risk baseLikelihood is set. |
| Inherent (vendor-adjusted) | Raw + the TPRA multiplier on vendor-linked risks. |
| Current Risk default | Posture-adjusted: vendor rating + survey answers reduce likelihood. This is "the risk as it stands today, before crediting your controls". |
| Residual Risk | Current risk reduced by rated control effectiveness. |
| Exceeds Appetite | Residual position coloured red/green against each risk's appetite threshold. |
The 5×5 matrix
Rows = impact band (Insignificant → Catastrophic), columns = likelihood band (Rare → Almost Certain). Each cell carries a label and a points value (1–100). The matrix is the scoring model — ratings come from direct cell lookup, so the calculator, heatmap and exports always agree. Two deliberate calibrations: Catastrophic × Rare = MEDIUM and Major × Rare = MEDIUM — tail risks never disappear into green.
| Rare | Unlikely | Possible | Likely | Almost Certain | |
|---|---|---|---|---|---|
| Catastrophic | MED 55 | HIGH 63 | HIGH 69 | EXT 81 | EXT 95 |
| Major | MED 41 | MED 53 | HIGH 56 | HIGH 71 | EXT 85 |
| Moderate | LOW 31 | MED 43 | MED 49 | HIGH 61 | HIGH 75 |
| Minor | LOW 21 | LOW 33 | MED 39 | MED 51 | HIGH 65 |
| Insignificant | LOW 11 | LOW 23 | LOW 29 | MED 41 | MED 55 |
7 · Risk appetite
Each risk carries an appetite (1 conservative … 9 aggressive), set per family in the shipped maps — e.g. Security/Agentic/Fail-Safe 3, Data/Governance 4, Business 6 in the AI map. A risk exceeds appetite when its residual points are above appetite × 10 and its residual rating is not LOW. Exceeding risks appear in the Exceeds Appetite view, a dedicated export table, and qualify for ✨ AI treatment suggestions.
8 · TPRA multiplier
A third-party security rating (BitSight, Panorays, UpGuard, or manual 1–10) is normalised to a multiplier between ×0.80 (excellent vendor) and ×1.20 (poor vendor) and applied to vendor-linked risks only — those with a vendor survey mapping. The config key scoring.tpraAffects selects the axis: impact (legacy) or likelihood (recommended — a vendor rating is evidence about how likely compromise is, not how big it would be). The assessor can override the multiplier per assessment.
9 · AI integration
[AI-suggested] in notes and comments, and the AI report is labelled in every export.| Feature | Where | What it does |
|---|---|---|
| ⎘ Copy AI package | Assessor · AI Prompt step | Copies the analysis prompt + the full Markdown report to the clipboard — paste into Copilot, Claude, ChatGPT. No API key needed. |
| ✨ Generate AI report | Assessor · AI Prompt step | Calls your configured API with the prompt + report; renders the analysis in-app and embeds it in Markdown/JSON exports and saved sessions. |
| ✨ AI scoping assist | Assessor · Scope step | Paste a system description; the AI proposes Yes/No/Do-not-know per scoping question with one-line justifications. |
| ✨ AI pre-fill | Assessor · Vendor & Internal steps | Paste evidence (SOC 2 summary, whitepaper, policies); the AI proposes answers only from the pasted material — anything unaddressed comes back N/A. |
| ✨ AI treatments | Assessor · Output step | For risks exceeding appetite, drafts a treatment decision and a two-sentence action plan focused on the weak controls. |
| ✨ Copilot | Configurator · top bar | Describe a use case; drafts a complete starter config in the proper schema. Load it, validate it, tailor it. |
Connection settings
Assessor: Settings → AI Connection. Configurator: inside the Copilot dialog. Two providers are supported: Anthropic (direct browser calls, default endpoint) and OpenAI-compatible (set the full chat-completions URL — note that some providers, including Azure OpenAI, block browser calls; use a proxy in that case).
10 · Config files & starter packs
All bundled packs live in configs/ and are available from the configurator's starter-pack gallery. Pick the closest pack, tailor scoring/appetite/wording, then use Save Config and load that file into the assessor. Periods are reused by domain: they may mean lifecycle stages, deal phases, maturity levels, migration waves or response stages.
| Config pack | Best used for | Periods / stages | Size |
|---|---|---|---|
ai-agentic-security-governance.json v1.0 | Governance of generative AI and agentic AI: tool access, data leakage, model/vendor risk, monitoring and human oversight. | Design, build, deploy, operate | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
bcm-resilience.json v2.0 | Business continuity and organisational resilience: BIA, IT disaster recovery, people/facilities, suppliers and crisis management. | Analyse, design, implement, validate | 24 risks · 25 controls · 7+14 survey Qs · 7 scope Qs |
cisa-kev-patch-velocity.json v1.0 | Risk-based vulnerability response for known exploited vulnerabilities, patch SLAs, exceptions and validation. | Identify, prioritise, remediate, validate | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
cloud-landing-zone-security.json v1.0 | Azure, AWS or GCP landing-zone foundations: IAM, network, logging, keys, workload protection, data and governance. | Foundation, migration, production, continuous control monitoring | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
cloud-migration-azure.json v2.0 | Azure migration readiness aligned to Cloud Adoption Framework / Well-Architected security themes. | Assess, mobilise, migrate, optimise | 23 risks · 25 controls · 9+14 survey Qs · 8 scope Qs |
ctem-exposure.json v2.0 | Continuous Threat Exposure Management across external attack surface, vulnerabilities, identity exposure, cloud/SaaS and validation. | Scoping, discovery, prioritisation, validation, mobilisation | 25 risks · 24 controls · 9+15 survey Qs · 7 scope Qs |
cyber-insurance-readiness.json v1.0 | Cyber insurance pre-underwriting and renewal readiness: evidence, controls, response and claim defensibility. | Quote, underwriting, renewal, claim | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
essential-eight-maturity.json v2.1 | Environment-aware Essential Eight maturity assessment across on-prem, cloud and SaaS, using the eight mitigation strategies as families. | ML1, ML2 and ML3 across on-prem, cloud and SaaS | 72 risks · 441 controls · 48+48 survey Qs · 12 scope Qs |
full-AI-risk-assessment.json v2.1 | Detailed AI system risk assessment: model quality, data, security, governance, operations, business, human factors, monitoring, agentic behaviour and fail-safe design. | P1-P7 AI lifecycle periods | 63 risks · 253 controls · 31+26 survey Qs · 32 scope Qs |
healthcare-patient-data-cyber.json v1.0 | Healthcare cyber risk for patient data, clinical availability, medical devices, EHR access, ransomware and care ecosystem suppliers. | Clinic, hospital, cloud, emergency | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
ma-due-diligence.json v2.0 | M&A cyber due diligence; the vendor survey is addressed to the target company and the internal survey to the acquirer/deal team. | Screening, due diligence, signing/Day-1, integration | 21 risks · 29 controls · 10+12 survey Qs · 7 scope Qs |
nist-csf-board-risk.json v1.0 | Executive-friendly cyber risk reporting aligned to NIST CSF 2.0 functions for boards, target-state planning and annual review. | Current, target, 90-day plan, annual review | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
ot-critical-infrastructure-cyber.json v1.0 | Operational technology and critical infrastructure cyber risk: asset visibility, remote access, segmentation, engineering workstations, safety and recovery. | Discover, stabilise, segment, monitor, recover | 40 risks · 120 controls · 40+40 survey Qs · 6 scope Qs |
ot-iot-deployment.json v2.0 | OT/IoT deployment risk for sensors, controllers, field devices and gateways; useful for IEC 62443-flavoured reviews. | Design, procurement, deployment, operation, decommission | 22 risks · 24 controls · 9+14 survey Qs · 7 scope Qs |
privacy-impact-apa.json v2.0 | Australian Privacy Principles / Notifiable Data Breaches privacy impact assessment, including processor and platform-provider assurance. | Design, build, operate, decommission | 22 risks · 27 controls · 9+13 survey Qs · 7 scope Qs |
project-gating.json v2.0 | Lightweight project security stage gate for initiatives that need a fast risk check before build or go-live. | Initiate, build, go-live | 16 risks · 18 controls · 5+10 survey Qs · 5 scope Qs |
ransomware-resilience.json v1.0 | Ransomware prevention, detection, containment and recovery, including backups, endpoint controls, lateral movement and crisis response. | Prevent, detect, contain, recover | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
saas-e8-onboarding.json v2.0 | SaaS vendor onboarding with an Essential Eight flavour; the vendor survey can double as the security questionnaire. | Selection, contracting, onboarding, operation | 21 risks · 33 controls · 14+11 survey Qs · 8 scope Qs |
saas-security-posture.json v1.0 | SaaS security posture management: identity, OAuth, tenant configuration, data sharing, logging and vendor assurance. | Discover, harden, monitor, react | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
small-business-cyber-baseline.json v1.0 | Plain-language small-business cyber uplift across MFA, devices, email, backups, updates, passwords and incident planning. | Today, 30 days, 90 days, annual | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
software-supply-chain-sbom.json v1.0 | Software supply-chain and SBOM readiness: dependencies, CI/CD, secrets, images, provenance, signing and release governance. | Source, build, test, release, operate | 40 risks · 120 controls · 40+40 survey Qs · 6 scope Qs |
standard-risk-map.json v1.7 | General system, service and vendor risk map covering CIA, IAM, operations, legal, third parties, people, AI and IoT. This is the configurator's built-in default register. | P1-P7 general lifecycle periods | 77 risks · 80 controls · 53+53 survey Qs · 31 scope Qs |
third-party-concentration-risk.json v1.0 | Vendor concentration and inherited-risk assessment for critical suppliers, fourth parties, cloud dependency, exit risk and contract rights. | Onboard, contract, operate, exit | 32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs |
11 · Schema reference (essentials)
| Key | Meaning |
|---|---|
type | Must be risk-register-config. |
overrides | Per-risk deltas/definitions keyed by risk id; {suppress:true} blanks a grid cell. |
resolved | The fully merged data the assessor reads — risks, families, periods, questions, controls, matrix, bands, scoring. Only risks whose family is on the grid are included. |
resolved.risks[] | id, family, period, name, meaning, mitigation, baseScore, strategyPct, fullScore, baseLikelihood?, drivenBy, vendorSurvey, internalSurvey, controls, appetite |
scoring | {unansweredAs:'excluded'|'zero', surveyMaxReduction:0–1, controlMaxReduction:0–1, tpraAffects:'impact'|'likelihood', detectiveAffects:'likelihood'|'impact', unevidencedYes:'full'|'partial'} — absent keys fall back to legacy defaults. |
controls[].refs | Framework cross-references, e.g. ISO27001:A.8.15; NIST CSF:DE.CM; E8:Regular-Backups; NIST AI RMF:MEASURE. Shown in exports. |
matrix / scoreBands / likelihoodBands / impactBands | The 5×5 cells and the 1–100 band thresholds. |
aiPrompt | System prompt used by the assessor's AI analysis. |
12 · Data & storage
- Autosave — assessor sessions (
riskAssessorAutosave) and configurator state (riskConfiguratorAutosave) in browser local storage, debounced 2 s. Security toggle (v3.5/v1.60): both top bars carry an Autosave ON/OFF button — OFF removes the existing autosave immediately and stops all background writes until you click Save yourself (hover the button for the explanation; with autosave off, unsaved work is lost if the tab closes or crashes). The preference persists per browser. - 🧹 Clear storage (both top bars, icon button — hover for details) — one click wipes everything the Risk apps keep between sessions in this browser: both autosaved sessions, guided-help preferences, AI connection settings and the session API key. Files saved to disk are untouched. If autosave was OFF, that security preference survives the wipe.
- ⏏ Exit (both top bars) — returns to the launcher (
index.html). If there is unsaved work it first asks whether to save; choosing not to save warns that changes are lost, noting whether autosave retains a copy. - AI settings —
riskAssessorAI/riskConfiguratorAI(localStorage) hold provider, endpoint and model. The API key is held separately in sessionStorage and is deleted when the tab or browser closes. - Nothing else leaves the browser. Configs, sessions and exports are plain files you control. AI features are the only network calls, and only to the endpoint you configure.
- Session files embed the config, all answers, notes, evidence references, treatments, overrides, custom controls and the AI report — one file restores the entire assessment.
13 · Tests & versions
The tests/ folder contains a runnable regression suite (requires Node.js). Run everything with node run-all.js from the tests/ folder — it executes syntax_check.js, extract_scoring.js, regression.js (40 scoring assertions) and phase2_test.js (13 feature assertions) in order and exits non-zero on any failure. The suites refuse to run against a truncated or stale copy of the HTML apps (e.g. an unsynced cloud mirror) instead of producing misleading failures. Run them after any change to the scoring code or the shipped configs.
| Component | Version | Change history |
|---|---|---|
| Risk Assessor | v3.6.1 | In-app: Changelog link on the landing screen. |
| Risk Configurator | v1.62 | In-app: version link in the footer opens the changelog. |
| AI Risk Map | v2.1 | Shipped in configs/ (full-AI-risk-assessment.json, standard-risk-map.json); the in-app changelogs record method changes. |
| Standard Risk Map | v1.7 |