Ir al contenido

AssuranceProgram / OSCAL

✅ Estable

El AssuranceProgram es la fuente declarativa del sistema de gestión de riesgos Art. 9 del EU AI Act: contiene los riesgos del sistema, las medidas de control, la evaluación y la residualidad. Es lo que froga compile transforma en el assessment_plan.oscal.yaml — el contrato de la barrera de riesgo.

El AssuranceProgram no es un fichero separado: es la sección risk del manifiesto froga.yaml (junto con context.applicable_standards y system.potential_misuses). Un repositorio gobierna un solo sistema con un único froga.yaml. froga compile lee la sección risk directamente del manifiesto:

froga.yaml (extracto)
context:
applicable_standards: # estándares aplicables (el primero, prioritario)
- eu/pren-18228@2026
- iso/23894@2023
risk: # programa de aseguramiento Art.9 (froga compile lo lee de aquí)
appetite: { individual: MEDIUM, society: MEDIUM, organization: HIGH }
criteria: { scale: "5x5" }
overall_residual_criterion: HIGH
risks: [ ... ]
applicability: {}

Ver referencia/froga-yaml para la especificación completa del manifiesto.


La sección risk de froga.yaml tiene el siguiente esqueleto de primer nivel:

froga.yaml — sección risk (esqueleto)
risk:
appetite: # apetito por dimensión de impacto (umbral de evaluación 6.4.4)
individual: MEDIUM
society: MEDIUM
organization: HIGH
criteria: { scale: "5x5" } # escala de la matriz de análisis
overall_residual_criterion: HIGH # criterio del residual GLOBAL (prEN 18228 cl. 10)
risks: # riesgos concretos con su tratamiento y sus measures
applicability: {} # Declaración de Aplicabilidad de controles

El marco regulatorio se declara fuera de risk, en context.applicable_standards; el mal uso previsible, en system.potential_misuses. Ver referencia/froga-yaml.

Los ids canónicos de estándares que froga conformance admite con catálogo:

Id canónicoEstándar
eu/pren-18228@2026prEN 18228 — gestión de riesgos de IA (Art. 9)
iso/23894@2023ISO/IEC 23894 — gestión de riesgos de IA

Cada entrada de risk.risks sigue esta estructura (campos del manifiesto público loan-scoring/froga.yaml):

froga.yaml — risk.risks (extracto real)
risk:
risks:
- id: risk.unfair-credit-exclusion
title: "Unfair Credit Exclusion of Minorities"
impact:
individual: HIGH
society: HIGH
organization: HIGH
likelihood: LIKELY # análisis ISO 6.4.3 — inherente LIKELY×HIGH = HIGH
treat:
- method: REDUCE
action: "Acotar la paridad demográfica de la decisión y el balance de clase por grupo."
controls: [eu/ai-act@2024#art-15]
residual_likelihood: UNLIKELY # objetivo 6.5; held-out n=200: el IC cruza el umbral → control INCONCLUSO (no confirma)
measures:
- id: unfair-credit-exclusion
metric: demographic_parity_diff
constraint: "< 0.092"
severity: high
enforcement: gate # gate → bloqueante; audit → advisory
lifecycle: [validation]
article: "15"
frameworks: [eu/dora@2022#art-6]
control_tier: protective
standard_clauses:
- "eu/pren-18228@2026#9.2"
- "eu/pren-18228@2026#7"
- "iso/23894@2023#6.5"
inputs: { prediction: prediction, dimension: gender }
CampoDescripción
idIdentificador único del riesgo; froga reconstruct lo traza por git log -S
titleTítulo legible
impactImpacto por dimensión (individual, society, organization): NEGLIGIBLE / LOW / MEDIUM / HIGH / CRITICAL
likelihoodProbabilidad inherente antes del tratamiento: RARE / UNLIKELY / POSSIBLE / LIKELY / ALMOST_CERTAIN
treat[].methodMétodo de tratamiento: REDUCE / AVOID / TRANSFER / ACCEPT
treat[].residual_likelihoodProbabilidad objetivo post-tratamiento (ISO 23894 §6.5); el control bloqueante la confirma cuando la evidencia tiene poder estadístico suficiente (si el IC cruza el umbral, queda INCONCLUSO, M-1)
CampoDescripción
idId de la medida; enlaza con los control_results del bundle y es la clave de cada entrada de metrics.json ({ id: valor }). El pipeline debe escribir el valor bajo el id, NO bajo el nombre de metric.
metricNombre de la métrica evaluada por el pipeline (etiqueta documental que viaja al OSCAL como metric_key); no es la clave de metrics.json — esa es el id.
constraintUmbral en notación < 0.03 / > 0.25 / >= 2
severityhigh / medium / low
enforcementgate → bloqueante (barrera de riesgo roja si falla); audit → advisory
lifecycleFases de ciclo de vida: data_preparation / validation
articleArtículo del EU AI Act que justifica la medida ("10", "15", etc.)
frameworksMarcos regulatorios adicionales (eu/dora@2022#art-9, etc.)
control_tierNivel jerárquico del control (prEN 18228 cl. 9.1.2): inherently_safe_design / protective / information
standard_clausesCláusulas que esta medida satisface; froga conformance las usa para proyectar la cobertura
inputsParámetros de entrada para la evaluación de la métrica

El bundle incluye, por riesgo, su procedencia de identificación:

ValorSignificado
declaredEl humano lo declaró directamente en la sección risk
proposed_by_kagReservado para identificación asistida (KAG futuro); hoy el equipo lo marca a mano en un riesgo emergente
derived_from_gapEmergió de un data_gap (EU AI Act Art. 10(5))

La procedencia es parte del arco del registro vivo: froga reconstruct la muestra junto al commit ISO 23894 §6.4.2 que introdujo el riesgo. Ver metodologia/assurance-program-vivo.


froga compile cruza la sección risk de froga.yaml con el catálogo de controles y genera el assessment_plan.oscal.yaml (el contrato de la barrera que froga run ejecuta):

Ventana de terminal
froga compile --repo .
# froga compile: froga.yaml (sección risk) → assessment_plan (shared_data/policies/assessment_plan.oscal.yaml)

El assessment plan es el contrato ex-ante: define qué métricas se miden, con qué umbral y con qué severidad. froga run lo ejecuta contra el pipeline y escribe el bundle.json firmado con los resultados.

froga.yaml (sección risk) →(froga compile)→ shared_data/policies/assessment_plan.oscal.yaml
(froga run ejecuta)
.froga/bundle.json + .sig

Ver referencia/froga-cli para la referencia completa de subcomandos.


El AssuranceProgram (la sección risk) no vive solo: se apoya en otras secciones del mismo froga.yaml:

  • system.potential_misuses — mal uso razonablemente previsible (ISO 42001 §6.1.4 / EU AI Act Art. 9(2)(b)): usos no previstos pero anticipables. Cada entrada (id, description, addressed_by) enlaza con el/los riesgo(s) que lo atienden. froga impact cruza el mal uso con el registro de riesgos y señala el no atendido (advisory).
  • system (name, intended_purpose, organization, version, decisions, affected_persons, component_type) — la identidad y el alcance del sistema de IA evaluado.
  • context.applicable_standards — los estándares aplicables a los que froga conformance proyecta el mismo registro de riesgos.

Ver referencia/froga-yaml para el detalle de cada sección.


  • El AssuranceProgram vive en froga.yaml, en el repo del usuario, versionado en git como cualquier otro fichero de código.
  • Cada commit que añade, modifica o cierra un riesgo es un acto auditable: froga reconstruct lo replaya desde la historia git del bundle.
  • La nube no recalcula: lee los .froga/* firmados commiteados y los renderiza (incluido el Anexo IV, que ensambla a partir del bundle.json firmado). Ver referencia/froga-artifacts.
  • Para el flujo completo del registro vivo (el humano declara, el commit es la identificación ISO 23894 §6.4.2; el KAG asistirá en el futuro): metodologia/assurance-program-vivo.