Identificación de riesgos (froga assess)
🟡 Parcial — El KAG (asistente de identificación de riesgos) es línea futura: hoy NO está disponible. `froga assess` es un stub honesto y la evaluación (clasificación + riesgos) se declara a mano en froga.yaml.
ISO 23894 §6.4.2 exige que la identificación de riesgos sea continua: los riesgos no se declaran una vez y se congelan, sino que el registro crece a medida que el sistema evoluciona. El programa de riesgos (el AssuranceProgram, hoy una sección — risk: — del propio froga.yaml) es ese registro vivo.
Hoy esa identificación la realiza el humano: el desarrollador o el quality manager declara a mano, en froga.yaml, tanto la clasificación del sistema (tier/basis/rationale) como el programa de riesgos (cada riesgo con su domain/rationale). El motor no infiere ni propone nada: froga run lee esa declaración directamente del manifiesto y falla de forma explícita si la clasificación falta.
El KAG (Knowledge Assessment Graph) será, en el futuro, el componente que asista esa identificación proponiendo riesgos candidatos a partir del contexto del sistema. Hoy no está disponible — ver El KAG (línea futura).
Qué hace froga assess
Sección titulada «Qué hace froga assess»Mientras el KAG no exista, froga assess es un stub honesto: no fabrica ni propone nada. Te recuerda que la evaluación se declara a mano y muestra la forma del bloque classification:. Está oculto de la ayuda pública y su exit code es siempre 0 (advisory).
froga assess --repo .froga assess: KAG no disponible aún.Declara la evaluación (clasificación + riesgos) a mano en `froga.yaml`:
classification: tier: high # high | limited | minimal | prohibited basis: - "EU AI Act Annex III §..." rationale: "..."
La evaluación queda en tu repositorio (manifiesto + bundle firmado); `froga run` la lee directamente.Consulta la documentación para cada dominio (crédito §5b, empleo §4, SaMD, educación §3...).El KAG (línea futura)
Sección titulada «El KAG (línea futura)»El KAG cerrará el bucle de identificación de riesgos (ISO 23894 §6.4.2) asistiendo al humano: mirará el contexto del sistema (metadata Croissant, métricas históricas, etc.) y propondrá riesgos candidatos que aún no estén en el AssuranceProgram, para que el equipo los cure. Será advisory, no bloqueante — la decisión de añadir un riesgo seguirá siendo humana.
El servicio real (Python por API) es trabajo futuro; se anuncia en la Hoja de ruta. El mock determinista que existía en versiones anteriores se eliminó para no simular una automatización que no existe: hasta que el KAG esté listo, la declaración a mano es la fuente de verdad. El contrato del componente (su entrada/salida) se conserva en el código para que la declaración humana de hoy encaje sin reescritura cuando llegue.
Flujo del registro vivo
Sección titulada «Flujo del registro vivo»El ciclo de crecimiento del registro, conforme a ISO 23894 §6.4.2, tiene cuatro pasos. Hoy el paso de detección lo realiza el humano (mediante análisis, revisión o medición); en el futuro el KAG lo asistirá.
- Identificación — el equipo detecta un riesgo nuevo (por análisis, deriva detectada o revisión periódica) que el registro no cubría.
- Declaración — lo añade a la sección
risk:defroga.yamlconimpact,likelihood,treatyprovenance(ver procedencia), o decide que no aplica y lo documenta. - Commit — el commit que añade el riesgo al programa es, en sí, el acto de identificación fechado y atribuible.
froga reconstructlo recupera después como «①Identificación». - Recompilación —
froga compileregenera elassessment_plan.oscal.yamlcon el nuevo riesgo. El motor vuelve a medir en el siguientefroga run.
Procedencia por riesgo
Sección titulada «Procedencia por riesgo»Cada riesgo lleva un campo provenance que clasifica su origen, con fines de auditoría (no afecta al tratamiento):
| Valor | Significado |
|---|---|
declared (por defecto) | El equipo lo identificó y declaró directamente. |
proposed_by_kag | Reservado para riesgos que surgen de la identificación asistida (el dominio del KAG futuro). Hoy el equipo puede usarlo a mano para marcar un riesgo emergente, detectado a mitad del desarrollo mediante análisis, frente a los declarados al inicio. |
derived_from_gap | Emergió de un data_gap detectado por el motor (EU AI Act Art. 10(5)) y propagado como riesgo de sesgo. |
La procedencia viaja al bundle de evidencia firmado, donde froga reconstruct la muestra distinguiendo cada origen.
Ejemplo: riesgo emergente de discriminación por edad
Sección titulada «Ejemplo: riesgo emergente de discriminación por edad»El siguiente es un ejemplo hipotético del ciclo de crecimiento del registro (no un escenario empaquetado). Partiendo del demo loan-scoring —cuyo programa declara cinco riesgos: exclusión crediticia injusta, gobernanza del dato, opacidad, robustez/seguridad del modelo y supervisión humana insuficiente—, supongamos que a mitad del desarrollo el equipo identifica un riesgo emergente que el registro inicial no cubría —discriminación por edad— y lo declara a mano en la sección risk:, marcándolo con provenance: proposed_by_kag para registrar que es un riesgo de identificación asistida (la clase que el KAG futuro propondrá):
risk: # … appetite, criteria, overall_residual_criterion, riesgos previos … risks: - id: risk.age-discrimination title: "Age-based Credit Discrimination" affects: [sys.creditscore] sources: [ctx.historical-bias] provenance: proposed_by_kag # identificación asistida (declarado a mano hoy) impact: { individual: HIGH, society: MEDIUM } likelihood: POSSIBLE # análisis ISO 6.4.3 — POSSIBLE×HIGH = HIGH treat: - method: REDUCE action: "Acotar la paridad demográfica de la decisión también por grupo de edad." controls: [eu/ai-act@2024#art-15] residual_likelihood: UNLIKELY measures: - id: age-discrimination metric: demographic_parity_diff constraint: "< 0.092" severity: high enforcement: gate lifecycle: [validation] article: "15" inputs: { prediction: prediction, dimension: age_bucket, age_bucket_method: quantiles, age_buckets: 3 }Tras declarar y commitear, se recompila y se vuelve a medir:
froga compile --repo .froga run --repo .# → ilustrativo: si la DP por edad superase el umbral (p. ej. ≈ 0.14 ≫ 0.092), el control age-discrimination FALLARÍA# → barrera ROJA: mitigar solo el género dejó injusta la dimensión de edadEste resultado es la iteración ISO: el registro creció, el motor detectó el hueco empírico y el equipo debe aplicar un nuevo tratamiento (V3, que mitiga género y edad simultáneamente). Al final del ciclo, froga reconstruct muestra la identificación fechada y atribuible (la procedencia proposed_by_kag se renderiza como «identificación asistida»):
① Identificación <sha> <fecha> «CRECIMIENTO: +risk.age-discrimination» · procedencia: identificación asistida (proposed_by_kag)La historia git de froga.yaml (el programa de riesgos) es el audit log de la identificación, fechado y atribuible, conforme a ISO 23894 §6.4.2.
Para el flujo completo paso a paso, incluida la exploración con dvc exp y el tratamiento V3, véase el Nivel 1.
Referencias
Sección titulada «Referencias»- Registro vivo del AssuranceProgram — ciclo de identificación continua y declaración
- Referencia
frogaCLI —froga compile,froga run - Hoja de ruta — el KAG real como trabajo futuro