Skip to content

Nivel 1 · El arco, por traspasos

This content is not available in your language yet.

El taller avanza en cuatro traspasos (hitos). En cada uno, un rol actúa y el otro espera. El icono y la columna te indican de quién es el turno: 🧭 Nerea arriba (portal · producto), 🛡️ Diego en medio (portal · calidad), 🧑‍💻 Marta a la derecha (CLI + git). Los tres están presentes desde el primer hito.

Los datos duros de cada hito —los comandos, el mensaje de commit, el diff y el color de la barrera— no están escritos a mano: cada bloque GuionStep los lee del guion steps/ del repositorio publicado. Si un paso no existiera, el build fallaría; lo que lees aquí es exactamente lo que el repositorio hace.

1Declarar el sistema y el riesgo
🧭 Nerea

Nerea es la responsable de producto del jardín botánico. Abre el portal y ejecuta las dos misiones de autoría que generan el manifiesto de gobernanza froga.yaml. La misión no edita el fichero directamente: Nerea escribe los datos en un formulario, el portal los valida y abre un PR con el froga.yaml resultante. Tres cosas importan en él:

  1. El marco es ISO 23894 — y solo ISO 23894. Sin EU AI Act, sin prEN, sin ley sectorial. La misión classify-system escribe el bloque context.applicable_standards con una única entrada: iso/23894@2023. (froga evalúa un sistema únicamente contra los estándares que declaras; declarar solo ISO significa que solo aplica el proceso ISO.)
  2. El nivel se declara mínimo — por un humano. La misma misión rellena el bloque classification con la justificación en palabras sencillas: «clasificar especies de flores no decide nada sobre ninguna persona; está fuera del Anexo III del EU AI Act.» El motor no infiere esto — una persona lo declara y lo asume.
  3. El riesgo, con el vocabulario ISO completo. La misión identify-risks añade risk.species-confusion«el modelo confunde versicolor con virginica*.»* Registra su probabilidad (PROBABLE, con solo las características del sépalo), su impacto en los tres ejes (individual BAJO, sociedad BAJO, organización MEDIO — un catálogo incorrecto, nadie sufre daño), la línea de apetito (organización: MEDIO) y el plan de tratamiento (añadir las características discriminativas) con el control que confirmará el residual: species-recall, una barrera de exhaustividad macro fijada en > 0,90.

Las dos misiones abren un PR en el repositorio del sistema. El turno pasa a Diego, que lo revisa e integra. En el guion, la identidad, el encuadre y el programa de riesgos quedan como tres commits del manifiesto froga.yaml —el diff del último muestra el riesgo con sus barreras numéricas fijadas antes de que exista modelo:

Identidad del sistema (froga init + patch) Nerea
Contexto, estándares aplicables y encuadre Nerea
Programa de riesgos con gates numéricos (antes del modelo) Nerea
🛡️ Diego

Diego recibe el PR que abrió la misión de Nerea, revisa que el manifiesto sea correcto — marco ISO 23894, nivel mínimo justificado, riesgo con vocabulario completo — e integra el PR. El froga.yaml declarado queda en el repositorio.

🧑‍💻 Marta

Todavía no hay nada que medir, pero Marta no está de brazos cruzados: deja el reproductor listo en git para que, en cuanto el riesgo esté declarado, medir sea inmediato. El repositorio con proyecto uv + DVC, el dataset Iris de Fisher (dominio público) con su manifiesto Croissant y el paso de rasgos ya son commits del guion:

Repo, identidad, proyecto uv (uv init + deps), DVC, pubkey y README del reproductor Martha
Commands
15
  • git init -q -b main
  • git config user.email marta@demo.seigarrena.dev
  • git config user.name "Marta Demo"
  • uv init --bare --name vldemo-iris --python 3.12
  • patch: pyproject-index.patch
  • uv add "dvc>=3" pyyaml froga "venturalitica==0.6.11" "mlcroissant>=1.0" pyarrow "scikit-learn==1.8.0" pandas joblib
  • patch: gitignore.patch
  • patch: gitattributes.patch
  • patch: readme.patch
  • uv sync
  • uv run dvc init --no-scm -q
  • uv run dvc config core.analytics false
  • froga pubkey --out .froga/PUBKEY.txt
  • git add -A
  • git commit -m "init: repo, proyecto uv (deps reales) y README del reproductor"
Dataset Iris + manifiesto Croissant + versionado DVC Martha
Pipeline de rasgos sobre el dataset Iris — escribe Y corre (dvc repro) Martha

Con el manifiesto declarado y el andamiaje en git, el turno pasa a medir: Marta ejecuta la barrera e informa del primer color (hito 2).

Venturalíticademo.venturalitica.ai
DeclaradoSiguiente: ejecutar y medir
Venturalíticademo.venturalitica.ai
¿Qué categoría del Anexo III aplica?
¿Qué clase MDR aplica al dispositivo?
¿Algún régimen adicional?
Venturalíticademo.venturalitica.ai
Riesgos significativos
IDTítuloProbabilidadImpacto individualImpacto socialImpacto organizaciónAsignar tratamiento a (opcional)
1
2Medir la V1: la barrera sale en rojo
🛡️ Diego

Esperando. Nerea ha declarado el sistema y el riesgo y Diego lo ha aprobado; ahora Diego espera la primera medición de Marta. Él no toca la CLI: cuando Marta informe del color de la barrera, verá si el riesgo es real y cuánto supera el apetito.

🧑‍💻 Marta

Marta toma el manifiesto y mide el sistema tal como está hoy — el riesgo inherente, sin tratar. Primero compila el contrato de la barrera desde froga.yaml —qué controles se van a medir y con qué umbral—:

Compilar el plan de evaluación OSCAL (antes del modelo) Martha
Commands
  • froga compile
  • git add -A
  • git commit -m "compile: assessment plan OSCAL (contrato del gate, antes del modelo)"

Ahora añade el modelo base —un logreg que, en V1, entrena solo con las medidas de sépalo (FEATURES = ["sepal_length", "sepal_width"] en train.py)— y corre la evidencia. froga run reproduce el pipeline, mide los controles y aplica la barrera:

Modelo logreg base V1 — escribe Y corre (gate RED esperado) MarthaExpected verdictRED
📍 reproducir iris-v0.1.0-red
git clone https://github.com/Venturalitica/vldemo-iris
cd vldemo-iris
git switch -c try iris-v0.1.0-red
Commands
  • patch: params.patch
  • patch: dvc-evaluate.patch
  • patch: train.patch
  • patch: evaluate.patch
  • patch: compliance-eval.patch
  • froga runmay fail
  • git add -A
  • git commit -m "modelo: logreg V1 solo-sépalo (train/evaluate + dvc.yaml) — run: V1 evidencia base (gate RED esperado; seed=42)"
  • git push -u origin main

froga compile solo se re-ejecuta cuando cambias la sección risk: del manifiesto; el tratamiento (hito 3) cambia train.py —no el riesgo—, así que allí basta con froga run.

El sépalo es la hoja exterior verde — y es la característica débil: en el espacio del sépalo, versicolor y virginica se solapan genuinamente. Así que el modelo las confunde. froga run señala el control species-recall como ROJO: la exhaustividad macro sale 0,81, por debajo de la barrera > 0,90. (La exhaustividad macro promedia la exhaustividad de las tres especies, así que el setosa fácil no puede enmascarar la confusión entre las otras dos.) El comando sale con código de error —de ahí el aviso «puede fallar» sobre froga run— pero el paquete está firmado y anclado: un resultado ROJO sigue siendo evidencia, registrada honestamente. El chip «reproducir» de arriba clona la etiqueta iris-v0.1.0-red y reproduce este mismo color.

El riesgo es real y supera el apetito; necesita tratamiento.

Venturalíticademo.venturalitica.ai
1 acción pendiente
Trata el riesgo de exhaustividadrecall macro 0,81 < 0,90
3Tratar el riesgo: la barrera pasa a verde
🛡️ Diego

Esperando. Diego ha visto el ROJO. Espera la evidencia de que el riesgo se ha tratado y el residual ha vuelto al apetito — él no toca git. Cuando Marta publique el paquete VERDE firmado, lo revisará y aprobará (hito 4).

🧑‍💻 Marta

Este es el núcleo del taller: el tratamiento. La barrera de riesgo es un contrato, y Marta solo cambia el color cambiando algo en git — nunca editando el umbral. La solución es dar al modelo las medidas de pétalo (petal_length, petal_width): el pétalo es la hoja interior de colores, la característica que realmente separa a versicolor de virginica. En este repositorio ese cambio es añadir esas dos columnas a la lista FEATURES de train.py — el diff es el tratamiento, y en un mismo paso Marta trata y vuelve a correr la barrera:

Abre la rama de tratamiento + añade las features de pétalo (§6.5) — escribe Y corre (gate VERDE) MarthaExpected verdictGREEN
📍 reproducir iris-v0.2.0-green
git clone https://github.com/Venturalitica/vldemo-iris
cd vldemo-iris
git switch -c try iris-v0.2.0-green
Commands
  • git checkout -b tratamiento/anadir-petalos
  • patch: train-petals.patch
  • froga run
  • git add -A
  • git commit -m "treatment: añade las features de pétalo (las discriminativas) — ISO 23894 §6.5"
  • git push -u origin tratamiento/anadir-petalos
  • froga pr open --base main --title "iris V2: features de pétalo (cierra el gate de recall)"

Añadir las columnas de pétalo a FEATURES es el tratamiento (ISO 23894 §6.5, «tratamiento del riesgo»): un cambio versionado en git —el modelo pasa de solo-sépalo (V1) a todas-las-características (V2)— que el motor atribuye al cierre del riesgo. Con los pétalos en el modelo, versicolor y virginica se separan con claridad. El control species-recall mide ahora 0,95, cómodamente por encima de la barrera > 0,90VERDE. El motor registra que el control pasa de ROJO → VERDE como un evento de tratamiento atribuido al commit del tratamiento: el residual está ahora confirmado por un control que pasa (el residual híbrido), no meramente declarado. La evidencia VERDE firmada ya vive en git —bajo la etiqueta iris-v0.2.0-green, reproducible desde el chip de arriba—; Marta la publica y el turno vuelve a Diego. La conformidad se emite en el hito de gobernanza.

Venturalíticademo.venturalitica.ai
Tratado · VERDE
4Gobernanza: conformidad, aprobación y cierre
🛡️ Diego

La evidencia VERDE firmada de Marta está en el repositorio, con la conformidad ya emitida (columna de Marta). Diego cierra el bucle desde el portal. La espera se convierte en revisión.

4.1 — Revisar la evidencia. El portal lee el paquete .froga/ a través de la conexión, verifica la firma de Marta con su clave pública registrada, y muestra el sistema declarado, tratado y VERDE: el control species-recall ha pasado al 0,95, el residual está confirmado en el apetito o por debajo, el bucle ISO 23894 está cerrado. La comprobación de firma es lo que permite a Diego confiar en que la evidencia viene de Marta y no ha sido alterada.

4.2 — Aprobar. Diego, como el rol responsable del sistema (owner), aprueba la publicación. Marta había solicitado la aprobación; Diego la concede, y el acto queda como un fichero firmado en el ledger —.froga/acts/NNNN-approve.json, un sobre DSSE (ECDSA-P256) verificable contra la clave pública de Diego declarada en signers:— que froga commitea:

Aprobar James
📍 reproducir iris-v1.0.0-approved
git clone https://github.com/Venturalitica/vldemo-iris
cd vldemo-iris
git switch -c try iris-v1.0.0-approved
🖊️ James approves

Reason: «Aprobación: el gate bloqueante de recall (risk.species-confusion) certifica en VERDE tras el tratamiento sépalo→pétalo (V2, recall macro ≈ 0.95 por encima del umbral) — no queda residual pendiente de aceptar.»

La aprobación no es una fila en una base de datos — ese acto firmado es la evidencia de aprobación: viaja con el repositorio, es atribuible por su firma y cualquiera puede verificarlo después.

🧑‍💻 Marta

Marta cierra su parte del ciclo desde la CLI. Con la V2 en VERDE, emite la conformidad y el reconstruct firmados —el proyecto del paquete sobre el catálogo ISO 23894 y el replay determinista del ciclo— y solicita la aprobación:

Conformance + reconstruct firmados Martha
Commands
  • froga conformance --standard iso/23894@2023 --outmay fail
  • froga reconstruct --outmay fail
  • git add -A
  • git commit -m ".froga: conformance + reconstruct firmados"
Solicitar aprobación (froga request) Martha
📍 reproducir iris-v1.0.0-request
git clone https://github.com/Venturalitica/vldemo-iris
cd vldemo-iris
git switch -c try iris-v1.0.0-request
git commitsolicitud de aprobación (el acto lo commitea froga request)

La aprobación es de Diego y solo de Diego (arriba): Marta la solicitó con el acto anterior, no puede concederla ella misma. Cuando el acto firmado .froga/acts/NNNN-approve.json de Diego aterriza, Marta re-emite la conformidad para que froga derive el ciclo de la historia git —ahora con la aprobación real— y re-firme el agregado sobre el estado Approved:

Re-emitir conformance tras aprobar Martha
Commands
  • froga conformance --standard iso/23894@2023 --outmay fail
  • froga reconstruct --outmay fail
  • git add -A
  • git commit -m ".froga: re-emisión de conformance + reconstruct tras aprobar"

El sistema queda declarado, tratado, firmado y aprobado: comercializable, con el acto de aprobación firmado de Diego anclado en la etiqueta iris-v1.0.0-approved de arriba. Ese es el final del arco.

Venturalíticademo.venturalitica.ai
Indeclarado
Declarado
Asegurado
Evaluado
Tratado
Aprobado
Comercializable
Venturalíticademo.venturalitica.ai

Aprobar la publicación

Marta produjo la evidencia; Diego, como owner, acepta el residual y aprueba.