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.

Risk Configuratordesign the assessment space:
risks, surveys, controls, matrix
Config JSONrisk-register-config
portable, versioned
Risk Assessorrun the assessment:
scope → surveys → controls → output
OutputsMarkdown · JSON · CSV
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

  1. Open Risk-assessor.html in a browser.
  2. Drop a config file onto the landing screen — e.g. configs/full-AI-risk-assessment.json or any starter pack from configs/.
  3. Fill in Metadata (project, organisation, assessor).
  4. Answer the Scope questions. Risks tied to a "No" are scoped out.
  5. Answer the Vendor and Internal surveys — these reduce the likelihood of well-managed risks.
  6. Rate the Controls — these produce the residual position.
  7. Review the Output heatmap; export Markdown / JSON / CSV or Print/PDF.
Your work autosaves to the browser every 2 seconds. If you close the tab, the landing screen offers ⟳ Restore unsaved session. Use Save (top bar) for a portable .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:

TabWhat it does
Risk RegisterThe 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 QuestionsYes/No questions with an ifNo list — the risks scoped out when the answer is No.
Vendor / Internal SurveyWeighted evidence questions linked to risks. Good answers reduce the likelihood of the linked risks in the assessor.
ControlsControls linked to risks, each with a type (Design/Operational/Contractual), an effect (Likelihood, Impact, Both, Detective, Governance), a weight, and optional framework refs.
Risk MatrixThe 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 PromptThe system prompt shipped inside the config for AI analysis in the assessor.
HelpBuilt-in guide and the JSON schema reference.

Top-bar tools

4 · Risk Assessor

An 8-step pipeline. Steps turn green as their relevant questions are completed.

StepPurpose
0 · MetadataProject, organisation, assessor, date, scope description.
1 · Risk MapRead-only view of all active risks, scores and appetites.
2 · ScopeYes / 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 surveyVendor security posture. Supports blank-survey export → vendor fills offline → import, and ✨ AI pre-fill from pasted evidence.
4 · Internal surveySame flow for your internal posture.
5 · ControlsRate each control Yes / Partial / No / N/A, attach notes and evidence references, and add custom controls per risk.
6 · OutputHeatmap with five view modes, per-risk popup (score cards, calculation trace, overrides, treatment plan), exports, Print/PDF, ⇄ session comparison, ✨ AI treatment suggestions.
7 · AI PromptEdit 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

AnswerEffect
YesFull weight (good posture / effective control).
PartialHalf weight (by default).
NoZero.
N/AExcluded entirely — does not count for or against the score.
UnansweredExcluded by default; with scoring.unansweredAs = "zero" it counts as worst-case (anti-gaming mode).
The caps are configurable per organisation in the config's 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

EffectReducesExamples
LikelihoodLikelihoodHardening, validation, least privilege, training
ImpactImpactRollback, kill-switch, fallback, indemnities, spares
BothLikelihood + impactSegmentation, human review gates, output filtering
DetectiveLikelihood or impact (configurable)Monitoring, logging, alerting, drift detection
GovernanceLikelihoodOwnership, 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.

ModeMeaning
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 defaultPosture-adjusted: vendor rating + survey answers reduce likelihood. This is "the risk as it stands today, before crediting your controls".
Residual RiskCurrent risk reduced by rated control effectiveness.
Exceeds AppetiteResidual 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.

RareUnlikelyPossibleLikelyAlmost Certain
CatastrophicMED 55HIGH 63HIGH 69EXT 81EXT 95
MajorMED 41MED 53HIGH 56HIGH 71EXT 85
ModerateLOW 31MED 43MED 49HIGH 61HIGH 75
MinorLOW 21LOW 33MED 39MED 51HIGH 65
InsignificantLOW 11LOW 23LOW 29MED 41MED 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

Design rule: human-in-the-loop everywhere. No AI suggestion is ever applied silently. Every suggestion appears in a review list where you accept or reject each item; applied items are tagged [AI-suggested] in notes and comments, and the AI report is labelled in every export.
FeatureWhereWhat it does
⎘ Copy AI packageAssessor · AI Prompt stepCopies the analysis prompt + the full Markdown report to the clipboard — paste into Copilot, Claude, ChatGPT. No API key needed.
✨ Generate AI reportAssessor · AI Prompt stepCalls your configured API with the prompt + report; renders the analysis in-app and embeds it in Markdown/JSON exports and saved sessions.
✨ AI scoping assistAssessor · Scope stepPaste a system description; the AI proposes Yes/No/Do-not-know per scoping question with one-line justifications.
✨ AI pre-fillAssessor · Vendor & Internal stepsPaste evidence (SOC 2 summary, whitepaper, policies); the AI proposes answers only from the pasted material — anything unaddressed comes back N/A.
✨ AI treatmentsAssessor · Output stepFor risks exceeding appetite, drafts a treatment decision and a two-sentence action plan focused on the weak controls.
✨ CopilotConfigurator · top barDescribe 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).

The API key is kept in session storage only — it is deleted automatically when the tab or browser closes, so you re-enter it each session. Provider, endpoint and model persist. Use a low-privilege, spend-capped key. Remember that AI features send assessment content to the configured endpoint — check your data classification rules first.

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 packBest used forPeriods / stagesSize
ai-agentic-security-governance.json v1.0Governance of generative AI and agentic AI: tool access, data leakage, model/vendor risk, monitoring and human oversight.Design, build, deploy, operate32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
bcm-resilience.json v2.0Business continuity and organisational resilience: BIA, IT disaster recovery, people/facilities, suppliers and crisis management.Analyse, design, implement, validate24 risks · 25 controls · 7+14 survey Qs · 7 scope Qs
cisa-kev-patch-velocity.json v1.0Risk-based vulnerability response for known exploited vulnerabilities, patch SLAs, exceptions and validation.Identify, prioritise, remediate, validate32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
cloud-landing-zone-security.json v1.0Azure, AWS or GCP landing-zone foundations: IAM, network, logging, keys, workload protection, data and governance.Foundation, migration, production, continuous control monitoring32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
cloud-migration-azure.json v2.0Azure migration readiness aligned to Cloud Adoption Framework / Well-Architected security themes.Assess, mobilise, migrate, optimise23 risks · 25 controls · 9+14 survey Qs · 8 scope Qs
ctem-exposure.json v2.0Continuous Threat Exposure Management across external attack surface, vulnerabilities, identity exposure, cloud/SaaS and validation.Scoping, discovery, prioritisation, validation, mobilisation25 risks · 24 controls · 9+15 survey Qs · 7 scope Qs
cyber-insurance-readiness.json v1.0Cyber insurance pre-underwriting and renewal readiness: evidence, controls, response and claim defensibility.Quote, underwriting, renewal, claim32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
essential-eight-maturity.json v2.1Environment-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 SaaS72 risks · 441 controls · 48+48 survey Qs · 12 scope Qs
full-AI-risk-assessment.json v2.1Detailed AI system risk assessment: model quality, data, security, governance, operations, business, human factors, monitoring, agentic behaviour and fail-safe design.P1-P7 AI lifecycle periods63 risks · 253 controls · 31+26 survey Qs · 32 scope Qs
healthcare-patient-data-cyber.json v1.0Healthcare cyber risk for patient data, clinical availability, medical devices, EHR access, ransomware and care ecosystem suppliers.Clinic, hospital, cloud, emergency32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
ma-due-diligence.json v2.0M&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, integration21 risks · 29 controls · 10+12 survey Qs · 7 scope Qs
nist-csf-board-risk.json v1.0Executive-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 review32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
ot-critical-infrastructure-cyber.json v1.0Operational technology and critical infrastructure cyber risk: asset visibility, remote access, segmentation, engineering workstations, safety and recovery.Discover, stabilise, segment, monitor, recover40 risks · 120 controls · 40+40 survey Qs · 6 scope Qs
ot-iot-deployment.json v2.0OT/IoT deployment risk for sensors, controllers, field devices and gateways; useful for IEC 62443-flavoured reviews.Design, procurement, deployment, operation, decommission22 risks · 24 controls · 9+14 survey Qs · 7 scope Qs
privacy-impact-apa.json v2.0Australian Privacy Principles / Notifiable Data Breaches privacy impact assessment, including processor and platform-provider assurance.Design, build, operate, decommission22 risks · 27 controls · 9+13 survey Qs · 7 scope Qs
project-gating.json v2.0Lightweight project security stage gate for initiatives that need a fast risk check before build or go-live.Initiate, build, go-live16 risks · 18 controls · 5+10 survey Qs · 5 scope Qs
ransomware-resilience.json v1.0Ransomware prevention, detection, containment and recovery, including backups, endpoint controls, lateral movement and crisis response.Prevent, detect, contain, recover32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
saas-e8-onboarding.json v2.0SaaS vendor onboarding with an Essential Eight flavour; the vendor survey can double as the security questionnaire.Selection, contracting, onboarding, operation21 risks · 33 controls · 14+11 survey Qs · 8 scope Qs
saas-security-posture.json v1.0SaaS security posture management: identity, OAuth, tenant configuration, data sharing, logging and vendor assurance.Discover, harden, monitor, react32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
small-business-cyber-baseline.json v1.0Plain-language small-business cyber uplift across MFA, devices, email, backups, updates, passwords and incident planning.Today, 30 days, 90 days, annual32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
software-supply-chain-sbom.json v1.0Software supply-chain and SBOM readiness: dependencies, CI/CD, secrets, images, provenance, signing and release governance.Source, build, test, release, operate40 risks · 120 controls · 40+40 survey Qs · 6 scope Qs
standard-risk-map.json v1.7General 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 periods77 risks · 80 controls · 53+53 survey Qs · 31 scope Qs
third-party-concentration-risk.json v1.0Vendor concentration and inherited-risk assessment for critical suppliers, fourth parties, cloud dependency, exit risk and contract rights.Onboard, contract, operate, exit32 risks · 96 controls · 32+32 survey Qs · 5 scope Qs
Every bundled config has been built to the same schema and is intended as a starter point, not a locked methodology. Before formal use, review the risk wording, appetite, scoring weights, controls and evidence expectations against your organisation and assurance standard.

11 · Schema reference (essentials)

KeyMeaning
typeMust be risk-register-config.
overridesPer-risk deltas/definitions keyed by risk id; {suppress:true} blanks a grid cell.
resolvedThe 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[].refsFramework 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 / impactBandsThe 5×5 cells and the 1–100 band thresholds.
aiPromptSystem prompt used by the assessor's AI analysis.

12 · Data & storage

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.

ComponentVersionChange history
Risk Assessorv3.6.1In-app: Changelog link on the landing screen.
Risk Configuratorv1.62In-app: version link in the footer opens the changelog.
AI Risk Mapv2.1Shipped in configs/ (full-AI-risk-assessment.json, standard-risk-map.json); the in-app changelogs record method changes.
Standard Risk Mapv1.7