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:
context: applicable_standards: # estándares aplicables (el primero, prioritario) - eu/pren-18228@2026 - iso/23894@2023risk: # 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.
Estructura de la sección risk
Sección titulada «Estructura de la sección risk»La sección risk de froga.yaml tiene el siguiente esqueleto de primer nivel:
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 controlesEl marco regulatorio se declara fuera de risk, en context.applicable_standards; el mal uso previsible, en system.potential_misuses. Ver referencia/froga-yaml.
context.applicable_standards
Sección titulada «context.applicable_standards»Los ids canónicos de estándares que froga conformance admite con catálogo:
| Id canónico | Estándar |
|---|---|
eu/pren-18228@2026 | prEN 18228 — gestión de riesgos de IA (Art. 9) |
iso/23894@2023 | ISO/IEC 23894 — gestión de riesgos de IA |
Anatomía de un riesgo
Sección titulada «Anatomía de un riesgo»Cada entrada de risk.risks sigue esta estructura (campos del manifiesto público loan-scoring/froga.yaml):
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 }Campos del riesgo
Sección titulada «Campos del riesgo»| Campo | Descripción |
|---|---|
id | Identificador único del riesgo; froga reconstruct lo traza por git log -S |
title | Título legible |
impact | Impacto por dimensión (individual, society, organization): NEGLIGIBLE / LOW / MEDIUM / HIGH / CRITICAL |
likelihood | Probabilidad inherente antes del tratamiento: RARE / UNLIKELY / POSSIBLE / LIKELY / ALMOST_CERTAIN |
treat[].method | Método de tratamiento: REDUCE / AVOID / TRANSFER / ACCEPT |
treat[].residual_likelihood | Probabilidad 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) |
Campos de una medida (measures[])
Sección titulada «Campos de una medida (measures[])»| Campo | Descripción |
|---|---|
id | Id 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. |
metric | Nombre 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. |
constraint | Umbral en notación < 0.03 / > 0.25 / >= 2 |
severity | high / medium / low |
enforcement | gate → bloqueante (barrera de riesgo roja si falla); audit → advisory |
lifecycle | Fases de ciclo de vida: data_preparation / validation |
article | Artículo del EU AI Act que justifica la medida ("10", "15", etc.) |
frameworks | Marcos regulatorios adicionales (eu/dora@2022#art-9, etc.) |
control_tier | Nivel jerárquico del control (prEN 18228 cl. 9.1.2): inherently_safe_design / protective / information |
standard_clauses | Cláusulas que esta medida satisface; froga conformance las usa para proyectar la cobertura |
inputs | Parámetros de entrada para la evaluación de la métrica |
Procedencia del riesgo (provenance)
Sección titulada «Procedencia del riesgo (provenance)»El bundle incluye, por riesgo, su procedencia de identificación:
| Valor | Significado |
|---|---|
declared | El humano lo declaró directamente en la sección risk |
proposed_by_kag | Reservado para identificación asistida (KAG futuro); hoy el equipo lo marca a mano en un riesgo emergente |
derived_from_gap | Emergió 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 — de DSL a OSCAL
Sección titulada «froga compile — de DSL a OSCAL»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):
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 + .sigVer referencia/froga-cli para la referencia completa de subcomandos.
Identidad del sistema y mal uso previsible
Sección titulada «Identidad del sistema y mal uso previsible»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 impactcruza 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 quefroga conformanceproyecta el mismo registro de riesgos.
Ver referencia/froga-yaml para el detalle de cada sección.
Relación con el resto del sistema
Sección titulada «Relación con el resto del sistema»- 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 reconstructlo 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 delbundle.jsonfirmado). 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.