Skip to content

Agnostic risk model

froga’s risk model is standard-agnostic: a risk is declared once with canonical primitives; a declarative projection per standard renders it into the vocabulary and artifacts that standard requires. The treatment loop — git closing the ISO 23894 cycle — is the universal core; what changes from standard to standard is only the vocabulary and the required artifacts.

“At their core, all standards are the same.”


The projection principle at the risk level

Section titled “The projection principle at the risk level”

This mechanism is the exact analogue of conformance by projection applied at the risk level. The correspondence is:

Measure levelRisk level
froga conformance projects measures onto clausesfroga risk-projection projects risks onto required artifacts
Per-standard clause cataloguePer-standard risk projection catalogue
conformance/<slug>.json signedrisk-projection/<slug>.json signed

Each projection lives in crates/froga-core/resources/risk-projections/<f>.yaml and defines:

  • vocabulary — how the canonical primitives are called in that standard (e.g. source: hazard in ISO 14971).
  • required_artifacts — what artifacts the standard requires per risk, and how to satisfy them from the already-declared primitives.
  • scoring — which scoring seam the standard uses.

The function derive_risk_projection(risks, def, bundle, ap, approval_present) (crates/froga-core/src/risk_projection.rs) applies the projection risk by risk, artifact by artifact, and produces a Covered / Partial / Gap decision per required artifact — reusing ConformanceDecision and the conformance evidence evaluator.


Each risk in froga.yaml is declared with three causal-chain primitives:

PrimitiveMeaning
sourceOrigin of the hazard (e.g. bias in training data)
pathwayRoute by which the hazard can cause harm
consequencePotential harm to people or the organisation

The benefit_risk field declares the benefit that offsets the risk when the standard requires it (ISO 14971). All four fields are optional by default (serde(default)); their absence produces Gap for the artifacts that need them.

Scoring (likelihood × impact) follows the ScoringModel seam: the default implementation FiveByFive reproduces exactly the ISO 23894 5×5 matrix (see ISO 23894 as a projection).


FrameworkCanonical idsource vocabulary
ISO 14971:2019 (medical device safety)iso/14971@2019hazardhazardous situationharm
prEN 18228:2026 (AI product requirements, AI Act)eu/pren-18228@2026sourcepathwayconsequence
ISO 23894:2023 (AI risk management process)iso/23894@2023sourcepathwayconsequence

ISO 23894 is now re-conducted as a projection: the projected residual level matches byte-for-byte the residual_overall computed by the engine (parity test included).


Project onto the ISO 14971 catalogue
froga risk-projection --repo . --framework iso/14971@2019
Project onto the prEN 18228 catalogue
froga risk-projection --repo . --framework eu/pren-18228@2026
All applicable frameworks (declared in applicable_standards)
froga risk-projection --repo .

Without --framework, the command iterates applicable_standards ∩ catalog and generates one projection per applicable framework in a single invocation (N-in-1).

The output indicates, per risk and per required artifact:

  • ✅ COVERED — the declared primitive satisfies the artifact.
  • ⚠ PARTIAL — the primitive exists but the evidence is incomplete.
  • ❌ GAP — the primitive is not declared or the evidence signal is missing.

With --out (implicit in N-in-1 mode), the command writes the signed artifacts:

.froga/risk-projection/iso_14971_2019.json ← signed FrogaArtifact<RiskProjection>
.froga/risk-projection/iso_14971_2019.json.sig ← DSSE envelope · in-toto · ECDSA-P256

The projection is on-demand: it is never sealed in the bundle. It is derived from the already-signed bundle.risk_analysis and signed as a separate artifact — the same pattern as froga conformance. Existing signed bundles remain byte-identical.

The control plane (cloud) reads the verified artifacts and renders them in Annex IV §5 at /[org]/systems/[slug]/annex-iv, showing the projection status per applicable framework.


The payoff of the agnostic model: adding a new normative framework does not require changing the engine core. It is enough to add a projection YAML in crates/froga-core/resources/risk-projections/ with its vocabulary, required artifacts, and scoring.

Candidates already on the roadmap: ISO 31000, ISO/IEC 27001, ISO 26262 (automotive), ARP4761 (aeronautics), Basel/NIST AI RMF (finance). Each = one YAML, no rewrite of the engine.


Artifacts with satisfied_by.evidence in the projection catalogues now resolve using real signals from the signed bundle — the same evaluator (evidence_present) used by froga conformance. They no longer return a fixed Gap.

Available signals and their honest proxies:

SignalProxy in the bundle or AP
monitoring_planNon-empty review_interval in the bundle or ≥ 1 measure with lifecycle: [monitoring] in the AP
power_stats≥ 1 ControlResult.power present in the bundle
approvalReal Froga-Approved-by: act in git (lifecycle Approved or UnderReview)
signed_bundleBundle present (by definition, when the command is invoked)
signed_bombom field present in the bundle (CycloneDX)
affected_persons≥ 1 system with affected_persons declared in the AP
foreseeable_misuse≥ 1 system with foreseeable_misuse declared in the AP

Honest nuance: monitoring_plan certifies a declared plan (review_interval or lifecycle:monitoring measures), not sustained operational post-market evidence. A notified body will further distinguish whether the plan carries Art. 72 semantics (normative citation + trigger + ISO 8601 frequency — actionable plan) from an unverifiable commitment (audit-only). The decision basis states this without ambiguity.

Artifacts evaluated from risk primitives (source, pathway, consequence, benefit_risk) and from built-in criteria (residual_present, overall_residual) do not use these signals and resolve directly from the RiskAssessment.


Integration with conformance by projection

Section titled “Integration with conformance by projection”

Both projections coexist and complement each other:

  • froga conformance projects at the measure level: proves that a control satisfies clauses of a standard.
  • froga risk-projection projects at the risk level: proves that the risk and its management satisfy the standard’s risk process.

Both derive from the same signed bundle.json and produce independent signed artifacts. Annex IV §5 renders them together.