Referencia del CLI `froga`
froga es el CLI de Risk-Driven Development (RDD) para sistemas de IA de alto riesgo. RDD es un término establecido de la ingeniería del software (Boehm, Fairbanks) que Venturalítica especializa para el tratamiento de riesgo regulatorio de IA (ver linaje). Cada subcomando opera sobre un repositorio git (flag --repo, por defecto el directorio de trabajo .). Los subcomandos que escriben artefactos los firman con ECDSA-P256+DSSE (firmante enchufable: local o Scaleway KMS, según FROGA_SIGNING_BACKEND) antes de escribirlos en .froga/. Son 22 subcomandos visibles (más assess oculto): init, run, status, verify, export, anchor, pubkey, compile, reconstruct, soa, conformance, risk-projection, impact, request, approve, review, reject, retire, auth, entitlement, sign-pliego y sign-detached.
froga init
Sección titulada «froga init»Genera el esqueleto del proyecto en un repositorio git: crea el directorio .froga/ y el manifiesto froga.yaml (con la sección risk del programa de aseguramiento) si todavía no existen.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
Qué escribe
Sección titulada «Qué escribe»froga.yaml— manifiesto del sistema (si no existía)..froga/— directorio de artefactos firmados (si no existía).
Ejemplo
Sección titulada «Ejemplo»froga init --repo /ruta/al/proyectofroga run
Sección titulada «froga run»Ejecuta el pipeline completo (pasos P1–P11) con detección de deriva: recomputa únicamente las secciones marcadas como stale respecto a froga.lock, ancla el resultado y firma el bundle de evidencia.
La barrera de riesgo determina el código de salida: si algún control bloqueante falla, froga run devuelve exit ≠ 0 aunque la evidencia quede igualmente anclada y firmada.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
Qué escribe
Sección titulada «Qué escribe».froga/bundle.json— bundle de evidencia firmado (ECDSA-P256+DSSE)..froga/bundle.json.sig— firma DSSE del bundle.froga.lock— ancla de frescura (hashes de las secciones del pipeline).
Relevancia normativa
Sección titulada «Relevancia normativa»La barrera de riesgo implementa el requisito de supervisión continua del EU AI Act Art. 9 y el bucle de tratamiento ISO 23894 §6.5.
Ejemplo
Sección titulada «Ejemplo»froga runfroga status
Sección titulada «froga status»Detecta deriva respecto a froga.lock y evalúa el estado de los controles de la barrera sin recomputar. Devuelve exit 0 si el sistema está al día y conforme; exit ≠ 0 en caso de deriva o de controles bloqueantes fallidos.
Úselo como barrera de CI/CD sin coste de recomputación.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
Qué devuelve
Sección titulada «Qué devuelve»- Imprime las secciones con deriva y los controles que fallan.
- Exit 0 = frescura ✓ + conformidad ✓; exit ≠ 0 si alguno falla.
Ejemplo
Sección titulada «Ejemplo»froga statusfroga verify
Sección titulada «froga verify»Verifica las firmas ECDSA-P256+DSSE de todo el dossier de evidencia presente en .froga/: bundle.json, reconstruct.json, conformance/*.json y risk-projection/*.json (cada uno contra su .sig). entitlement.json se excluye deliberadamente: lo firma el emisor Venturalítica, no el sistema. Verifica contra una clave pública explícita — es la vía de verificación de terceros (auditor, AAPP), que no necesitan la clave privada del fabricante. La pubkey se resuelve en orden: --pubkey → .froga/PUBKEY.txt → (solo con --allow-dev-key) el backend de firma local.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--pubkey | string | (.froga/PUBKEY.txt) | Clave pública del firmante (SEC1 sin comprimir, hex 04…, 130 caracteres). Si se omite, se lee .froga/PUBKEY.txt. |
--allow-dev-key | bool | false | Cae al backend de firma local si no hay --pubkey ni .froga/PUBKEY.txt. Solo desarrollo: verificas contra tu propia clave, sin no-repudio frente a un tercero. |
--export | ruta | (ninguno) | En vez del dossier del repo, verifica un paquete de exportación (el directorio que genera froga export): comprueba el git bundle, la firma del manifiesto contra su pubkey.pem y que el manifiesto describe ese bundle. Ver froga export. |
Qué devuelve
Sección titulada «Qué devuelve»- Imprime
firma VÁLIDAy exit 0, ofirma INVÁLIDAy exit ≠ 0. - Un artefacto del dossier sin su
.siges un fallo: un dossier firmado debe traer la firma de cada pieza. - Falla si no existe el bundle o la firma (indica que no se ha ejecutado
froga run), o si no hay material público que verificar (ni--pubkey, niPUBKEY.txt, ni--allow-dev-key).
Ejemplo
Sección titulada «Ejemplo»# Verificación de terceros: contra la pubkey publicada del firmantefroga verify --pubkey 04a1b2…# Con .froga/PUBKEY.txt presente en el repofroga verifyfroga pubkey
Sección titulada «froga pubkey»Imprime la clave pública del firmante configurado del motor (ECDSA-P256, formato SEC1 sin comprimir, 65 bytes en hexadecimal). El cliente la exporta y la registra en la nube (campo signerPubkey de la conexión) para que la nube verifique su evidencia firmada (verificación por-conexión).
Qué devuelve
Sección titulada «Qué devuelve»- La clave pública en hexadecimal (130 caracteres, prefijo
04) por la salida estándar. - Respeta el firmante configurado por
FROGA_SIGNING_BACKEND(localoscaleway-kms).
Ejemplo
Sección titulada «Ejemplo»froga pubkey# 0477b3dc…c60froga compile
Sección titulada «froga compile»Compila el programa de aseguramiento (Art. 9) declarado en la sección risk de froga.yaml y genera el oscal.assessment_plan correspondiente. Este plan es el contrato formal de la barrera: define qué controles se miden y bajo qué condiciones.
También emite avisos advisories sobre la jerarquía de controles (prEN 18228 cl. 9.1.2): no bloquea la compilación, pero señala controles sin nivel de jerarquía declarado.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
Qué escribe
Sección titulada «Qué escribe»- El fichero declarado en
oscal.assessment_plan(plan de evaluación OSCAL).
Relevancia normativa
Sección titulada «Relevancia normativa»EU AI Act Art. 9 (sistema de gestión de riesgos); ISO 23894 §6.4 (planificación de la evaluación).
Ejemplo
Sección titulada «Ejemplo»froga compilefroga reconstruct
Sección titulada «froga reconstruct»Reconstruye el ciclo de tratamiento de riesgos ISO 23894 por riesgo mediante replay de la historia git del bundle de evidencia (.froga/bundle.json). El proceso es determinista y no requiere un modelo de lenguaje.
Por cada riesgo, el informe recorre las cinco fases: ① identificación (commit que introdujo el riesgo en el AssuranceProgram), ② análisis (likelihood × impacto → nivel inherente), ③ evaluación (vs. apetito de riesgo), ④ tratamiento (arco empírico FALLA→PASA por commit), ⑤ riesgo residual (ciclo ISO: CERRADO / ABIERTO / DISCREPANCIA / ACEPTADO).
También reporta la aprobación de dirección más reciente (ISO 42001 §6.1.3) y la prioridad de tratamiento (ISO 42001 §6.1.2e2).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--out | bool | false | Si se especifica, escribe .froga/reconstruct.json (+ .sig) además de imprimir por stdout. |
Qué escribe (con --out)
Sección titulada «Qué escribe (con --out)».froga/reconstruct.json— informe estructurado firmado (ECDSA-P256+DSSE)..froga/reconstruct.json.sig— firma DSSE.
Relevancia normativa
Sección titulada «Relevancia normativa»ISO 23894 §6.4.2 (identificación), §6.4.3 (análisis), §6.4.4 (evaluación), §6.5 (tratamiento y residual); ISO 42001 §6.1.2–6.1.3.
Ejemplo
Sección titulada «Ejemplo»froga reconstruct --outfroga export
Sección titulada «froga export»Exporta un paquete de auditoría verificable sin conexión: un directorio autocontenido que un tercero (organismo notificado, auditor) comprueba sin red ni acceso a la forja. Empaqueta el DAG completo de git como git bundle y un manifiesto DSSE firmado que ata ese bundle al veredicto ISO 23894 derivado mediante reconstruct_sha256 (reproducible clonando el bundle y re-ejecutando froga reconstruct). El binding fuerte del veredicto es ese digest, no el hash del bundle.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--out | ruta | (froga-export-<sistema>-<oid>/) | Directorio de salida del paquete. |
--ref | string | HEAD | Ref a exportar (se empaqueta todo su DAG ascendente). |
Qué escribe
Sección titulada «Qué escribe»<out>/repo.bundle—git bundledel DAG completo hasta la ref.<out>/manifest.dsse.json— manifiesto DSSE in-toto firmado (predicadogit-bundle/v1), con el keyid del firmante.<out>/pubkey.pem— clave pública del firmante (SPKI PEM). El auditor debe confirmarla fuera de banda contra la clave conocida del emisor: la firma prueba integridad, no autenticidad por sí sola.<out>/README.txt— instrucciones de verificación sin conexión.
Falla cerrado si el repositorio es shallow (clon superficial) o tiene refs/replace/* (el DAG no sería fiel), o si el destino existe y no está vacío.
Relevancia normativa
Sección titulada «Relevancia normativa»EU AI Act Anexo IV (documentación técnica entregable a terceros); ISO 23894 §6.4–6.5 (reconstrucción verificable del ciclo de tratamiento).
Ejemplo
Sección titulada «Ejemplo»froga export --out paquete-auditoria/froga verify --export paquete-auditoria/froga anchor
Sección titulada «froga anchor»Firma la punta del ref gobernado (por defecto HEAD) con un acto-ancla de topología DSSE y lo escribe en el tag anotado froga/anchor. Por la propiedad de Merkle del DAG de git, el OID de la punta compromete todo el historial ascendente: anclarlo cierra el vector A2 (que la nube derive el ciclo de vida confiando ciegamente en la topología que le reporta el REST de la forja, en vez de verificarla contra un compromiso firmado por el propio motor).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--ref | string | HEAD | Ref cuya punta se ancla. |
Qué escribe
Sección titulada «Qué escribe»- El tag anotado
froga/anchor(git tag -a -f), movido a la punta del ref, con el sobre DSSE firmado (predicadotopology-anchor/v1) como mensaje del tag.
Falla cerrado si el repositorio es shallow (clon superficial) o tiene refs/replace/* (el DAG no sería fiel), o si no hay clave de firma configurada.
Relevancia normativa
Sección titulada «Relevancia normativa»EU AI Act Art. 12 (mantenimiento de registros); ISO 23894 §6.4 (trazabilidad de la topología sobre la que se deriva el ciclo de tratamiento).
Ejemplo
Sección titulada «Ejemplo»froga anchorfroga soa
Sección titulada «froga soa»Genera la Declaración de Aplicabilidad (Statement of Applicability, SoA — ISO/IEC 42001 §6.1.3 b/c/f). Cruza el catálogo del Anexo A de ISO/IEC 42001:2023 con las medidas declaradas en el AssuranceProgram y con el último bundle de evidencia. Clasifica cada control en:
- INCLUIDO — cubierto por al menos una medida del AssuranceProgram (muestra el estado de implementación: IMPLEMENTADO / PARCIAL / PLANIFICADO / NO IMPLEMENTADO).
- EXCLUIDO — decisión justificada explícitamente (§6.1.3f).
- OMITIDO — sin medida que lo implemente ni exclusión declarada (hueco a revisar).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
Relevancia normativa
Sección titulada «Relevancia normativa»ISO/IEC 42001:2023 §6.1.3 b/c/f (Declaración de Aplicabilidad del sistema de gestión de IA).
Ejemplo
Sección titulada «Ejemplo»froga soafroga conformance
Sección titulada «froga conformance»Evalúa la conformidad por cláusula del bundle de evidencia firmado contra un estándar normativo (prEN 18228 o ISO 23894). Proyecta el bundle sobre el catálogo de cláusulas del estándar y clasifica cada cláusula como CUBIERTA / PARCIAL / HUECO, agrupada por fase del ciclo del estándar.
Sin --standard, emite todos los estándares declarados en context.applicable_standards de froga.yaml (el estándar prioritario primero).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--standard | string | (todos los aplicables) | Id del estándar, p. ej. eu/pren-18228@2026 o iso/23894@2023. Omitir = emite todos los declarados en applicable_standards. |
--history | bool | false | Proyecta la conformidad en cada iteración del bundle (commits de evidencia), no solo el estado actual. |
--out | bool | false | Escribe .froga/conformance/<slug>.json (+ .sig) por estándar, además de imprimir. |
--against-pliego | ruta | — | Compuerta contra un pliego OSCAL firmado por la AAPP: intersecta las cláusulas exigidas por el pliego con la evidencia de conformidad firmada del licitador. Exit ≠ 0 si falla alguna cláusula block. |
--aapp-pubkey | string | — | Clave pública de la AAPP que firmó el pliego (SEC1 hex 04…, 130 caracteres). Obligatoria con --against-pliego. El formato se valida al parsear: malformada → error de uso (exit 2), nunca un «Rechazado» engañoso. |
--pubkey | string | (.froga/PUBKEY.txt) | Clave pública del licitador que firmó la evidencia. Si se omite, se lee .froga/PUBKEY.txt. Mismo formato SEC1 validado al parsear que --aapp-pubkey. |
--allow-dev-key | bool | false | Cae al backend de firma local para la pubkey del licitador (solo desarrollo, sin no-repudio). |
Qué escribe (con --out)
Sección titulada «Qué escribe (con --out)».froga/conformance/<slug>.json— informe de conformidad firmado por estándar..froga/conformance/<slug>.json.sig— firma DSSE.
Compuerta contra un pliego firmado (--against-pliego)
Sección titulada «Compuerta contra un pliego firmado (--against-pliego)»Con --against-pliego <pliego.oscal.yaml> --aapp-pubkey <hex>, conformance deja de ser una proyección informativa y pasa a ser una compuerta de contratación: verifica la firma del pliego de la AAPP (ver froga sign-pliego), intersecta las cláusulas que el pliego marca como block con la evidencia de conformidad firmada del licitador y devuelve exit ≠ 0 si falla alguna. Es lo que hace que el umbral lo imponga el pliego (la AAPP), no el proveedor. La autenticidad de las firmas no implica aceptación ni conformidad: son tres comprobaciones distintas.
Códigos de salida — el error de uso no se disfraza de veredicto:
- exit 0 — la entrega sería Aceptada (todas las cláusulas
blockcubiertas). - exit 1 — la entrega sería Rechazada (nombrando la cláusula que falla), o un error de ejecución (falta
--aapp-pubkey, no se resuelve la pubkey del licitador…). - exit 2 — error de uso: una pubkey malformada (
--aapp-pubkeyo--pubkeyque no son04+ 128 hex) se rechaza al parsear, con el formato esperado en el mensaje. Exit 2 no es un veredicto sobre la entrega — antes, una clave malformada acababa disfrazada de «Rechazado · ausente» en todas las cláusulas.
Relevancia normativa
Sección titulada «Relevancia normativa»prEN 18228 (CEN/CENELEC JTC 21, gestión de riesgos EU AI Act Art. 9); ISO 23894 (gestión de riesgos IA); EU AI Act Art. 9; EU AI Act Art. 47 (cadena de suministro, con --against-pliego).
Ejemplo
Sección titulada «Ejemplo»froga conformance --standard eu/pren-18228@2026 --outfroga conformance --history# La AAPP verifica la entrega del licitador contra su pliego firmadofroga conformance --against-pliego pliego.oscal.yaml \ --aapp-pubkey 04a1b2… --pubkey 0477b3…froga impact
Sección titulada «froga impact»Genera la evaluación de impacto del sistema de IA (ISO/IEC 42001 §6.1.4): por cada sistema declarado en el AssuranceProgram, lista la finalidad prevista, las decisiones que toma y las personas afectadas; y analiza el mal uso razonablemente previsible (EU AI Act Art. 9(2)(b)), cruzándolo con el registro de riesgos para identificar los casos de mal uso sin riesgo que los atienda.
Devuelve exit ≠ 0 únicamente si existen referencias colgantes: un campo addressed_by que apunta a un riesgo inexistente en el registro (indica que el AssuranceProgram está roto). El mal uso no atendido se señala, pero no bloquea (advisory).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
Relevancia normativa
Sección titulada «Relevancia normativa»ISO/IEC 42001:2023 §6.1.4 (evaluación de impacto del sistema de IA); EU AI Act Art. 9(2)(b) (mal uso razonablemente previsible).
Ejemplo
Sección titulada «Ejemplo»froga impactfroga request
Sección titulada «froga request»Registra la solicitud de aprobación del plan de tratamiento como un acto firmado en .froga/acts/ (un sobre DSSE firmado con la clave del actor --by, declarada en el bloque signers: de froga.yaml). El mantenedor usa este comando para iniciar el ciclo de revisión formal; el acto queda atribuido, fechado y verificable por firma, y lo recoge froga reconstruct.
El ciclo habitual es: froga request (mantenedor) → revisión humana → froga approve (dirección) o froga reject (dirección con motivo).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--by | string | (requerido) | Persona o rol que solicita la aprobación, p. ej. "Ana García <ana@compania.com>". |
Qué escribe
Sección titulada «Qué escribe»Un acto firmado .froga/acts/NNNN-request.json: un sobre DSSE in-toto firmado con la clave del actor --by (sustituye al commit-trailer Froga-Approval-Requested-by: que escribía el nivel 2, decorativo y falsificable).
Relevancia normativa
Sección titulada «Relevancia normativa»ISO/IEC 42001:2023 §6.1.3 (proceso de revisión y aprobación del tratamiento de riesgos).
Ejemplo
Sección titulada «Ejemplo»froga request --by "Ana García <ana@compania.com>"froga approve
Sección titulada «froga approve»Registra la aprobación de dirección del plan de tratamiento y la aceptación del riesgo residual (ISO/IEC 42001 §6.1.3) como un acto firmado en .froga/acts/ (un sobre DSSE firmado con la clave del actor --by). El acto queda así atribuido a una persona o rol, fechado y verificable por firma, y es recogido por froga reconstruct.
El cuatro-ojos es criptográfico: la aprobación ha de firmarse con una clave DISTINTA de la que firmó la solicitud (froga request); una autoaprobación con la misma clave no cuenta como segundo par de ojos.
Si se ejecuta froga run después de la aprobación sin una nueva aprobación, froga reconstruct marcará la aprobación como DESACTUALIZADA.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--by | string | (requerido) | Persona o rol de dirección que aprueba, p. ej. "Jane Roe <jane@org>". |
--reason | string | (opcional) | Motivo de la aprobación, p. ej. la aceptación consciente de un residual ámbar. |
Qué escribe
Sección titulada «Qué escribe»Un acto firmado .froga/acts/NNNN-approve.json: un sobre DSSE in-toto firmado con la clave del actor --by (sustituye al commit-trailer Froga-Approved-by: que escribía el nivel 2).
Relevancia normativa
Sección titulada «Relevancia normativa»ISO/IEC 42001:2023 §6.1.3 (aprobación del tratamiento de riesgos y aceptación del residual).
Ejemplo
Sección titulada «Ejemplo»froga approve --by "Ana García <ana@compania.com>"froga review
Sección titulada «froga review»Registra la revisión periódica del riesgo (ISO/IEC 23894 §6.6) como un acto firmado en .froga/acts/ (un sobre DSSE firmado con la clave del actor --by). Una revisión posterior a la aprobación, sin una nueva aprobación más reciente, reabre el ciclo (estado «en revisión periódica») hasta que la dirección vuelve a aprobar. Cubre la pata por TIEMPO de la revisión (la cadencia se declara en risk.review_interval de froga.yaml); la pata por «cambio significativo» ya la cubre la marca de aprobación DESACTUALIZADA.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--by | string | (requerido) | Persona o rol que realiza la revisión, p. ej. "Jane Roe <jane@org>". |
Qué escribe
Sección titulada «Qué escribe»Un acto firmado .froga/acts/NNNN-review.json: un sobre DSSE in-toto firmado con la clave del actor --by (sustituye al commit-trailer Froga-Reviewed-by: que escribía el nivel 2).
Relevancia normativa
Sección titulada «Relevancia normativa»ISO/IEC 23894:2023 §6.6 (revisión y seguimiento del proceso de gestión de riesgos).
Ejemplo
Sección titulada «Ejemplo»froga review --by "Ana García <ana@compania.com>"froga reject
Sección titulada «froga reject»Registra el rechazo de la aprobación como un acto firmado en .froga/acts/ (un sobre DSSE firmado con la clave del actor --by). El motivo es obligatorio (--reason). El ciclo de revisión vuelve a estado pendiente: el mantenedor ha de corregir las evidencias y volver a ejecutar froga request.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--by | string | (requerido) | Persona o rol de dirección que rechaza, p. ej. "Jane Roe <jane@org>". |
--reason | string | (requerido) | Motivo del rechazo, p. ej. "faltan evidencias de sesgo en el subgrupo X". |
Qué escribe
Sección titulada «Qué escribe»Un acto firmado .froga/acts/NNNN-reject.json (sobre DSSE in-toto), con el motivo en el payload del acto (sustituye al commit-trailer Froga-Rejected-by: que escribía el nivel 2).
Relevancia normativa
Sección titulada «Relevancia normativa»ISO/IEC 42001:2023 §6.1.3 (proceso de revisión del tratamiento de riesgos; trazabilidad de decisiones de rechazo).
Ejemplo
Sección titulada «Ejemplo»froga reject --by "Ana García <ana@compania.com>" --reason "faltan evidencias de sesgo en el subgrupo edad"froga merge
Sección titulada «froga merge»Fusiona una rama de tratamiento en su base con cuatro-ojos por clave verificado —un acto approve DSSE en la rama firmado con una clave distinta a la del request—, un merge --no-ff y un acto ancla de topología firmado sobre la nueva punta (A6b). Reproduce LocalForge.mergePR fuera del arnés TS.
froga merge --branch tratar/species-recall --base main --by "Marta Dev <marta@example.com>"| Flag | Valor | Por defecto | Significado |
|---|---|---|---|
--repo | ruta | . | Repositorio sobre el que operar. |
--branch | nombre | (obligatorio) | Rama de tratamiento a fusionar (la que lleva el acto approve). |
--base | nombre | main | Rama base donde aterriza el merge. |
--by | identidad | (obligatorio) | Identidad del commit de merge (cosmética — el cuatro-ojos vive en la firma del acto, no en el autor del commit). |
--title | texto | (nombre de la rama) | Título del PR/MR para el mensaje del merge. |
--signer | ref | (entorno) | Firmante del acto ancla de topología tras fusionar (ver froga request). |
froga pr
Sección titulada «froga pr»Abre el PR/MR de la rama actual en la forja (A1: GitLab). Toma el subcomando open.
froga pr open --base main --title "Tratar species-recall"| Flag | Valor | Por defecto | Significado |
|---|---|---|---|
--repo | ruta | . | Repositorio sobre el que operar. |
--base | nombre | main | Rama destino del PR/MR. |
--title | texto | (ninguno) | Título del PR/MR (por defecto, el de la propia forja). |
froga deliver
Sección titulada «froga deliver»Registra la entrega de un entregable obligatorio (Anexo IV, DoC, DORA RoI, DPIA, DoC-MDR) como un acto firmado en .froga/acts/. Es el registro de entrega que habilita el estado marketable: sustituye al antiguo commit-mensaje «deliverable: <kind> downloaded» (que era decorativo y falsificable).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--by | string | (requerido) | Persona o rol que recoge el entregable, p. ej. "Jane Roe <jane@org>". |
--kind | string | (requerido) | Tipo de entregable entregado: annex-iv, doc, dora-roi, dpia, doc-mdr. |
Qué escribe
Sección titulada «Qué escribe»Un acto firmado .froga/acts/NNNN-deliver.json: un sobre DSSE in-toto firmado con la clave del actor --by, con el kind del entregable en el payload.
Relevancia normativa
Sección titulada «Relevancia normativa»EU AI Act Art. 11 y Anexo IV (documentación técnica); Art. 47 (declaración UE de conformidad, DoC); Reglamento DORA (Registro de Información, RoI).
Ejemplo
Sección titulada «Ejemplo»froga deliver --by "Ana García <ana@compania.com>" --kind annex-ivfroga retire
Sección titulada «froga retire»Registra la retirada del sistema del mercado o de operación como un acto firmado en .froga/acts/ (un sobre DSSE firmado con la clave del actor --by). El motivo es opcional. froga reconstruct reportará el sistema como RETIRADO a partir de este acto.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--by | string | (requerido) | Persona o rol que retira el sistema, p. ej. "Jane Roe <jane@org>". |
--reason | string | (opcional) | Motivo de la retirada, p. ej. "fin de ciclo de vida operativo". |
Qué escribe
Sección titulada «Qué escribe»Un acto firmado .froga/acts/NNNN-retire.json: un sobre DSSE in-toto firmado con la clave del actor --by (sustituye al commit-trailer Froga-Retired-by: que escribía el nivel 2).
Relevancia normativa
Sección titulada «Relevancia normativa»EU AI Act Art. 9 (ciclo de vida del sistema de IA); EU AI Act Art. 61 (seguimiento post-comercialización y retirada).
Ejemplo
Sección titulada «Ejemplo»froga retire --by "Ana García <ana@compania.com>" --reason "fin de ciclo de vida operativo"froga risk-projection
Sección titulada «froga risk-projection»Proyecta los riesgos del bundle de evidencia firmado a un marco normativo de riesgo específico (ISO 14971, prEN 18228, ISO 23894) y escribe el resultado como artefacto firmado bajo demanda. El mecanismo es el espejo de froga conformance pero subido del nivel de medida al nivel del riesgo: por cada riesgo, deriva el vocabulario normativo del marco (hazard → hazardous situation → harm, para ISO 14971; source → pathway → consequence para prEN 18228) y evalúa la benefit-risk si está declarada.
Sin --framework, emite todos los marcos con catálogo de proyección declarados en context.applicable_standards de froga.yaml.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--repo | ruta | . | Ruta al repositorio git sobre el que operar. |
--framework | string | (todos los aplicables) | Id del marco de riesgo (p. ej. iso/14971@2019, eu/pren-18228@2026, iso/23894@2023). Omitir = emite todos los declarados en applicable_standards que tienen catálogo de proyección. |
Qué escribe
Sección titulada «Qué escribe».froga/risk-projection/<slug>.json— proyección firmada (ECDSA-P256+DSSE)..froga/risk-projection/<slug>.json.sig— firma DSSE.
La proyección se deriva del bundle.risk_analysis sellado y se firma bajo demanda; nunca queda sellada en el bundle principal.
Relevancia normativa
Sección titulada «Relevancia normativa»ISO 14971:2019 (análisis de riesgos para productos sanitarios: hazard→hazardous situation→harm + benefit-risk); prEN 18228 (source→pathway→consequence); ISO 23894 (ciclo de tratamiento ISO 23894 —test de paridad verifica que el nivel proyectado == residual_overall). La nube renderiza los artefactos verificados en el Anexo IV §5.
Ejemplo
Sección titulada «Ejemplo»# Proyectar a ISO 14971 (medtech)froga risk-projection --framework iso/14971@2019
# Proyectar a todos los marcos aplicables con catálogo de proyecciónfroga risk-projectionfroga keygen
Sección titulada «froga keygen»Genera (o reutiliza) el par de claves ECDSA-P256 local del firmante sin tocar la red: escribe la clave privada en ~/.froga/signing.key (permisos 600) e imprime la clave pública SEC1 derivada y su origen (generada, reusada o tomada de FROGA_SIGNING_KEY). Es el camino offline de primera clase para entornos sin salida a internet (CI on-prem, fabricantes): permite firmar sin cuenta ni nube. El enrolado posterior es opcional: froga auth reutiliza esta clave si ya existe (no la regenera).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--out | ruta | ~/.froga/signing.key | Ruta alternativa del fichero de clave a crear o reusar. |
Qué escribe
Sección titulada «Qué escribe»~/.froga/signing.key(o--out) — clave privada del firmante (permisos600); nunca se transmite.- En pantalla: la clave pública SEC1 en hex (la misma que
froga pubkey) y dónde quedó la clave.
froga auth
Sección titulada «froga auth»Registra el par de claves local del firmante en la nube: genera (o reutiliza) el par ECDSA-P256 en ~/.froga/signing.key (permisos 600) y enrola solo la clave pública en el sistema (ScmConnection) indicado. La clave privada nunca sale de la máquina. Es el paso que vincula un firmante (persona o CI) a un sistema por su rol antes de declarar, aprobar o ejecutar.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--system | string | (requerido) | ID del sistema (ScmConnection) al que se asocia el firmante. |
--url | string | (requerido) | URL base de la nube, p. ej. https://app.venturalitica.ai. |
--role | string | declarant | Rol del firmante: declarant, approver o executor. |
--label | string | froga-cli | Etiqueta legible del firmante, p. ej. "laptop Nerea" o "CI GitHub Actions". |
--code | string | — | Código de enrolado interactivo (generado en la UI de Seigarrena). Excluye --token. |
--token | string | — | Token de despliegue para CI (alternativo al código interactivo). Excluye --code. |
Qué escribe
Sección titulada «Qué escribe»~/.froga/signing.key— clave privada del firmante (permisos600); nunca se transmite.- Registra la clave pública en la nube (
ScmConnection.signerPubkey) con el rol declarado.
Relevancia normativa
Sección titulada «Relevancia normativa»EU AI Act Art. 12 (registro atribuible); separación de funciones (four-eyes) mediante el rol del firmante.
Ejemplo
Sección titulada «Ejemplo»froga auth --system sys_abc123 --url https://app.venturalitica.ai --role declarant --code 482913froga entitlement sync
Sección titulada «froga entitlement sync»Solicita a la nube el entitlement de normas firmado del sistema y escribe .froga/entitlement.json en el repositorio. Es lo que habilita los catálogos de normas de pago (open-core): el motor lo lee para saber qué estándares puede proyectar. La nube nunca escribe en .froga/; lo escribe froga, y el usuario o el CI lo commitea.
La emisión está gateada por el plan de la organización: pedir una norma que el plan no licencia responde 403 con el plan mínimo que la incluye nombrado. Qué norma entra en qué plan, en Planes y normas.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--system | string | (requerido) | ID del sistema (ScmConnection) en la nube. |
--url | string | (requerido) | URL base de la nube, p. ej. https://app.venturalitica.ai. |
--token | string | (requerido) | Token de despliegue CI (FROGA_DEPLOY_TOKEN). |
--repo | ruta | . | Directorio raíz del sistema (contiene froga.yaml y .froga/). |
--standards | string | (los de froga.yaml) | Estándares a solicitar, separados por comas (p. ej. eu/pren-18228@2026,eu/mdr@2017). Omitir = los applicable_standards del froga.yaml. |
Qué escribe
Sección titulada «Qué escribe».froga/entitlement.json— entitlement de normas firmado por la nube (el usuario/CI lo commitea).
Ejemplo
Sección titulada «Ejemplo»froga entitlement sync --system sys_abc123 --url https://app.venturalitica.ai --token "$FROGA_DEPLOY_TOKEN"froga entitlement dev (entorno efímero, SOLO desarrollo)
Sección titulada «froga entitlement dev (entorno efímero, SOLO desarrollo)»En un entorno sin nube (demos, CI local) sync no está disponible (necesita --token). froga entitlement dev firma el entitlement LOCALMENTE con el issuer DEV embebido en el binario (froga_core::verify::dev_issuer_scalar_hex), cubriendo los estándares paid declarados en context.applicable_standards de froga.yaml, y lo escribe en el mismo .froga/entitlement.json.
Es advisory, NO válido en producción: el escalar del issuer DEV es público (vive en el binario compilado). Un binario release no lo ancla como emisor de confianza salvo que se fije FROGA_ISSUER_PUBKEY explícitamente a su pubkey — algo que solo hace el propio entorno efímero, nunca producción.
froga entitlement dev --repo .froga sign-pliego
Sección titulada «froga sign-pliego»La AAPP (poder adjudicador) firma el pliego OSCAL (pliego.oscal.yaml) con su clave local del llavero (ECDSA-P256, el mismo esquema con que se firma la evidencia). La clave privada nunca sale de la máquina de la AAPP. El resultado es un sobre DSSE/in-toto (<FICHERO>.sig) verificable con la clave pública de la AAPP: es lo que hace el pliego vinculante, de modo que froga conformance --against-pliego pueda imponer sus cláusulas al licitador.
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--out | ruta | <FICHERO>.sig | Ruta donde escribir el sobre DSSE. |
Qué escribe
Sección titulada «Qué escribe»<FICHERO>.sig— sobre DSSE/in-toto del pliego, verificable con la clave pública de la AAPP.
Relevancia normativa
Sección titulada «Relevancia normativa»EU AI Act Art. 47 (cadena de suministro); contratación pública: el pliego firmado fija el umbral de conformidad que el licitador debe cumplir.
Ejemplo
Sección titulada «Ejemplo»froga sign-pliego pliego.oscal.yamlfroga sign-detached
Sección titulada «froga sign-detached»Firma un artefacto cualquiera (binario, tarball, wheel…) con ECDSA-P256 y escribe la firma destacada (detached) en formato DER. Verificable con OpenSSL usando la clave pública del motor en formato PEM (froga pubkey --pem).
| Flag | Tipo | Por defecto | Descripción |
|---|---|---|---|
--out | ruta | <FICHERO>.sig | Ruta donde escribir la firma DER. |
Qué escribe
Sección titulada «Qué escribe»<FICHERO>.sig— firma DER destacada del artefacto.
Ejemplo
Sección titulada «Ejemplo»froga sign-detached froga-0.1.1-linux-x86_64.tar.gz# Verificar la firma:openssl dgst -sha256 -verify <(froga pubkey --pem) \ -signature froga-0.1.1-linux-x86_64.tar.gz.sig \ froga-0.1.1-linux-x86_64.tar.gzEl Anexo IV no es un subcomando
Sección titulada «El Anexo IV no es un subcomando»El Anexo IV (EU AI Act Art. 11) no lo emite el motor. El motor solo produce evidencia firmada: el bundle.json (con procedencia por campo) y los artefactos .froga/*. El plano de control (la nube) ensambla y renderiza el Anexo IV a partir del bundle.json firmado y lo exporta a PDF (Typst). No es un artefacto del motor, no se commitea, y no existe ningún comando froga annex-iv.
Ver Los artefactos .froga/* para los artefactos que sí emite el motor.