Skip to content

Level 5 · The arc, by handoffs

Four beats. As in previous levels, all three roles are present from the first: 🧭 Nerea at the top (portal · product), 🛡️ James in the middle (portal · quality), 🧑‍💻 Martha on the right (CLI + git). The lesson of this arc is telling apart a defect that gets fixed from a limit that gets declared, both riding the same treatment: feature leakage is the ONLY blocking control and CLOSES (RED→GREEN by dropping the feature); data adequacy and selection fairness are genuinely measured but stay advisory — they do not block, and their residual is consciously accepted at approval. The system closes GREEN, approved.

The hard data in each beat —the commands, the commit message, the diff and the gate colour— is not hand-written: every GuionStep block reads it from the repository’s steps/ script. Were a step to not exist, the build would fail; what you read here is exactly what the repository does. The commands and commit messages are the verbatim Spanish artefacts of the repo you clone.

1Declare the §4 employment system: one safety gate + two advisory findings
🧭 Nerea

Nerea is the Product Owner at Example Talent Corp, an employer deploying a screening model. She opens the portal and runs the chained authoring missions that generate the governance manifest froga.yaml. Three things matter:

  1. The tier is high, declared by a human, via the employment route. The classify-system mission fills in the classification block with the basis: “EU AI Act Annex III §4 (employment / workers’ management / access to employment)”. The high-risk trigger here is Annex III §4 — not Art. 6(1), not §5(b). The engine does not infer it; Nerea declares it and owns it.
  2. One blocking control and two measured advisory findings are declared. The identify-risks mission adds risk.feature-leakagethe model may learn a feature that leaks the placement label — with the blocking control model-feature-leakage (enforcement: gate); risk.inadequate-datathe sample is too small to certify selection fairness — with the advisory control data-sample-adequacy (enforcement: audit: measured, non-blocking); and risk.selection-fairnessthe screener may select at a different rate by sex — with the advisory control selection-rate-disparity-gender (enforcement: audit, citing Ley 15/2022 Art. 23). The protected attribute for fairness is sex; with n=215 that control is underpowered (same root as data-sample-adequacy) — which is why it is advisory, not gate: certifying it would block on a sample that cannot sustain it.
  3. Audit-only risks are declared too, and the standards are set. Insufficient human oversight (Art. 14 / RGPD Art. 22) and insufficient transparency (Art. 13 / RGPD) — declared, tracked, not gated. Works-council information (ET Art. 64.4.d) is also declared, but its clause et.64-4-d-transparencia-algoritmica is Covered by the signed bundle (rank 0 → no presumption). The declare-standards mission writes applicable_standards with seven standards: eu/pren-18228@2026, iso/23894@2023, eu/ai-act@2024, eu/pren-18283@2026, eu/pren-18282@2026, plus national legislation es/et-rdleg-2-2015@2015 + es/ley-15-2022@2022 (rank 0, no presumption) — no DORA, no MDR.

The three missions open a PR in the system’s repository. The turn passes to James, who reviews and merges it. In the script, the identity, the framing and the risk programme land as three froga.yaml manifest commits —the diff of the last one shows the one blocking control and the two advisory findings with their numeric thresholds fixed before any model exists:

Identidad del sistema (froga init + patch) Nerea
Contexto y estándares aplicables (empleo Anexo III §4) Nerea
Clasificación (alto riesgo) y programa de riesgos con gates numéricos (antes del modelo) Nerea
🛡️ James

James receives the PR opened by Nerea’s missions, reviews that the manifest is correct — tier high via Annex III §4 (employment), the one blocking control (risk.feature-leakage with model-feature-leakage, enforcement: gate), the two advisory findings (risk.inadequate-data with data-sample-adequacy, and risk.selection-fairness with selection-rate-disparity-gender, protected attribute sex, both enforcement: audit), the audit-only risks, and the seven standards (including national law ET + Ley 15/2022, rank 0) with no DORA or MDR — and merges it. The declared froga.yaml is now in the repository.

🧑‍💻 Martha

There is nothing to measure yet, but Martha leaves the reproducer ready in git: the uv + DVC project and the real Campus Placement dataset with its Croissant manifest are already script commits:

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-talent-screening --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 Campus Placement + manifiesto Croissant + versionado DVC Martha

With the manifest declared and the scaffolding in git, the turn passes to measuring (beat 2).

Venturalíticademo.venturalitica.ai
DeclaredNext: run and measure
Venturalíticademo.venturalitica.ai
Which Annex III category applies?
Which MDR class applies to the device?
Any additional regime?
Venturalíticademo.venturalitica.ai
Significant risks
IDTitleLikelihoodIndividual impactSocietal impactOrganizational impactAssign treatment to (optional)
1
2
3
4
5
6
2Measure V1: red on the safety gate
🛡️ James

Waiting. Nerea has declared the system and James has merged it; now James waits for Martha’s first measurement. He does not touch the CLI: when Martha reports the gate colour, he will see which controls fail and why.

🧑‍💻 Martha

Martha measures the system as it stands — untreated. First she compiles the gate contract from froga.yaml —which controls to measure and against what threshold—:

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)"

Now she adds the base model —a GradientBoosting classifier trained on the raw Campus Placement features, including salary (mitigate: false)— and runs the evidence. froga run reproduces the pipeline, measures the controls and applies the gate:

Modelo gradient-boosting base V1 — escribe Y corre (gate RED esperado) MarthaExpected verdictRED
📍 reproducir talent-v1.0.0-red
git clone https://github.com/Venturalitica/vldemo-talent-screening
cd vldemo-talent-screening
git switch -c try talent-v1.0.0-red
Commands
  • patch: params.patch
  • patch: dvc.patch
  • patch: train.patch
  • patch: evaluate.patch
  • patch: compliance-eval.patch
  • froga runmay fail
  • git add -A
  • git commit -m "modelo: gradient-boosting V1 (train/evaluate + dvc.yaml) — run: V1 evidencia base (gate RED esperado; seed=42)"

The one blocking control comes back RED, and why is the point:

  • model-feature-leakage = leaky_feature_flag 1.0, gate < 1.0FAILS (blocking). The salary feature is only present for placed candidates (NaN for not-placed, imputed to 0), so it is collinear with the placement label — total leakage. A model that “reads the answer” is not measuring merit: it is a safety defect (Art.15).

Alongside it, two ADVISORY controls are genuinely measured but do not block the gate:

  • data-sample-adequacy = sample_adequacy_ratio 0.43 (215 / 500). With n=215 there are not enough records to certify that the selection is fair across sex. Measured, documented — non-blocking.
  • selection-rate-disparity-gender (selection-rate parity by sex, threshold < 0.10, citing Ley 15/2022 Art. 23) is genuinely measured on the test cohort — but with n=215 (~24 women) it is underpowered: the engine certifies neither fairness nor unfairness, the same root as data-sample-adequacy. Advisory, non-blocking.

So the overall gate is RED — the one blocker fails. The command exits non-zero, but the bundle is signed and anchored regardless: a RED result is evidence, recorded honestly. One real safety defect, and two findings already measured that will ride advisory all the way to approval.

Venturalíticademo.venturalitica.ai
Evaluated · RED (3 controls)
3Treat the leak: the gate closes, the bar turns green
🛡️ James

Waiting. James has seen the V1 RED on the blocker. He does not touch git; he waits for the re-measured evidence, where he will read whether the safety defect closes.

🧑‍💻 Martha

This is the treatment (ISO 23894 §6.5). Flipping mitigate to true in params.yaml makes the pipeline drop the salary feature before training — a versioned change in git that the engine attributes the risk treatment to. The diff is the treatment, and in the same step Martha runs the gate again over the model that no longer carries the leaked column:

Abre la rama de tratamiento + retira la feature fugada salary (§6.5) — escribe Y corre (gate VERDE) MarthaExpected verdictGREEN
📍 reproducir talent-v2.0.0-green
git clone https://github.com/Venturalitica/vldemo-talent-screening
cd vldemo-talent-screening
git switch -c try talent-v2.0.0-green
Commands
  • git checkout -b tratamiento/retira-salary
  • patch: params-mitigate.patch
  • froga run
  • git add -A
  • git commit -m "treatment: retira la feature fugada salary (mitigate false→true; cierra model-feature-leakage; data-sample-adequacy sigue abierto)"
  • model-feature-leakage = leaky_feature_flag 0.0, gate < 1.0PASSES. The one blocking control CLOSES — a clean RED→GREEN by removing the feature. Since it is the program’s only blocking control, the overall gate turns GREEN.
  • data-sample-adequacy = sample_adequacy_ratio 0.43unchanged. Dropping a column does not add rows; it keeps measuring as advisory, non-blocking.
  • selection-rate-disparity-gender — still measured and underpowered at V2. Dropping salary does not manufacture women in the sample: the parity by sex is re-measured, but n=215 still cannot certify fairness. It is the fairness face of the same data limit — advisory, non-blocking.

So the overall gate turns GREEN. Read it precisely: the treatment fixes contamination (a leaked feature) — that is the only thing a code change can fix. It cannot manufacture data: the fix for risk.inadequate-data is still “acquire ≥500 representative records”, a data gap, not a code gap. That is why that finding stays advisory instead of gate: certifying it would block on a sample this dataset can never sustain.

Leakage green, data and fairness measured-advisory — that is the state carried into the decision.

Venturalíticademo.venturalitica.ai
Leakage treated · GREEN
4Governance: approve green with the advisory residual accepted
🛡️ James

This is the close. Martha’s GREEN, treated, signed evidence is in the repo, with the request already emitted (Martha’s column). James reviews the bundle, verifies Martha’s signature, and sees the safety defect resolved: the treatment demonstrated the close of the one blocking control — there is nothing left to fail on the gate. But two advisory findings remain that the gate never certifies because the sample does not allow it: data-sample-adequacy (0.43) and selection-rate-disparity-gender (underpowered).

James approves — the approval accepts both advisory findings at once: data adequacy and selection fairness, both genuinely measured but not certifiable at n=215. The approval is a git-native, signed act: a DSSE act .froga/acts/NNNN-approve.json —ECDSA-P256 signed and verified against James’s key declared in signers:— records who approved; the commit that adds it is plain text, not GPG-signed (do not expect a “Verified” badge when you click it on GitHub), but the act itself is cryptographically signed; the motive that accepts the advisory residual lands in the portal’s record (the CLI accepts --reason here and anchors it in the act); and alongside the act the evidence is signed too (bundle.json.sig and the conformances). With the approval in history, conformance is re-emitted and prEN 18228’s clause 11 (risk-management review) flips from Gap to Covered on reading the approval act:

Aprobar (gate verde; residual de datos/equidad aceptado conscientemente) James
📍 reproducir talent-v2.0.0-approved
git clone https://github.com/Venturalitica/vldemo-talent-screening
cd vldemo-talent-screening
git switch -c try talent-v2.0.0-approved
🖊️ James approves

Reason: «Aprobación en VERDE: el único control bloqueante (model-feature-leakage) está confirmado tras el tratamiento (retirada de la feature fugada salary) — el defecto de seguridad certificable está corregido. Los hallazgos de data-sample-adequacy (n=215/500=0.43) y selection-rate-disparity-gender (subpoderado con n=215) NO se certifican por ser Campus Recruitment una muestra topada; se aceptan conscientemente como residual, con vigilancia post-mercado trimestral de la disparidad de selección y revisión periódica P6M. Remedio real: adquirir datos representativos adicionales (Art.10(3), línea futura).»

The engine does not erase the advisory residual: it anchors it in the approval, attributable and verifiable, with quarterly post-market monitoring (Art.72) over selection disparity. That is the difference between consciously accepting a limit and hiding it or forcing it green.

🧑‍💻 Martha

Martha closes her part of the cycle from the CLI. With V2 GREEN and signed, she emits the conformance and reconstruct over the applicable standards and requests approval:

Conformance + reconstruct firmados (entitlement de pago + 7 normas) Martha
Commands
  • patch: entitlement.patch
  • froga conformance --standard eu/pren-18228@2026 --outmay fail
  • froga conformance --standard iso/23894@2023 --outmay fail
  • froga conformance --standard eu/ai-act@2024 --outmay fail
  • froga conformance --standard eu/pren-18283@2026 --outmay fail
  • froga conformance --standard eu/pren-18282@2026 --outmay fail
  • froga conformance --standard es/et-rdleg-2-2015@2015 --outmay fail
  • froga conformance --standard es/ley-15-2022@2022 --outmay fail
  • froga reconstruct --outmay fail
  • git add -A
  • git commit -m ".froga: conformance + reconstruct firmados"
Solicitar aprobación (gate verde; residual advisory pendiente de aceptación) Martha
📍 reproducir talent-v2.0.0-request
git clone https://github.com/Venturalitica/vldemo-talent-screening
cd vldemo-talent-screening
git switch -c try talent-v2.0.0-request
git commitsolicitud de aprobación (el acto lo commitea froga request)

The approval is James’s (above): Martha requested it with the previous act, she cannot grant it herself. When James’s signed act .froga/acts/NNNN-approve.json lands —with the data/fairness advisory residual consciously accepted—, Martha re-emits conformance so froga derives the cycle from git history, now with the real approval:

Re-emitir conformance tras aprobar (cl.11 = Approved) Martha
Commands
  • froga conformance --standard eu/pren-18228@2026 --outmay fail
  • froga conformance --standard iso/23894@2023 --outmay fail
  • froga conformance --standard eu/ai-act@2024 --outmay fail
  • froga conformance --standard eu/pren-18283@2026 --outmay fail
  • froga conformance --standard eu/pren-18282@2026 --outmay fail
  • froga conformance --standard es/et-rdleg-2-2015@2015 --outmay fail
  • froga conformance --standard es/ley-15-2022@2022 --outmay fail
  • froga reconstruct --outmay fail
  • git add -A
  • git commit -m ".froga: re-emisión de conformance + reconstruct tras aprobar (cl.11 = Approved)"

The system ends up declared, treated, GREEN, requested, and approved with the data/fairness advisory residual (sample adequacy + selection fairness) on record: the end of the arc, with James’s approval anchored at the talent-v2.0.0-approved tag above.

Venturalíticademo.venturalitica.ai
Undeclared
Declared
Assured
Tested
Treated
Approved
Marketable
Venturalíticademo.venturalitica.ai

Approve green with the advisory residual on record

The one blocking control (model-feature-leakage) is already GREEN, confirmed by the treatment. Two advisory findings remain that the sample (n=215) cannot certify: data adequacy and selection fairness. James consciously accepts both, with a motive, and sets quarterly post-market monitoring (Art.72).
Data adequacy not certifiabledata-sample-adequacy = 0.43 (215/500) — advisory, non-blocking; requires conscious acceptance with a motive.
Underpowered selection fairnessselection-rate-disparity-gender is measured but n=215 does not certify the result — advisory, non-blocking; requires conscious acceptance.