Skip to content

code-safety.mjs scan falla de forma intermitente con exit 2 y sin diagnóstico #276

Open

Description

@egdev6

Problema

scripts/security/code-safety.mjs scan falla de forma intermitente en GitHub Actions. Termina con exit 2 y solo imprime code-safety-failed, sin indicar qué falló. Al relanzar el mismo commit sin cambios, pasa.

Evidencia

Consumidor: egdev6/cadencia, workflow Code safety (.github/workflows/code-safety.yml), TRUSTED_BASELINE 176ae636fdd80ce60d6fffec188ce558c5f6692b, ubuntu-24.04.

El 2026-11-13, 8 de 12 ejecuciones fallaron al primer intento. Todas eran commits que solo tocaban docs o tests, y cada falla relanzada pasó:

Run Evento Resultado
43471452145 workflow_dispatch main falla
43479115736 PR fix/ci-runner-baseline falla → pasa en el intento 2
43483179689 PR fix/07-contract-closure falla → pasa en el intento 2
43485117633 push main falla
43487463944 PR docs/14-v3a-evidence falla → pasa en el intento 2
43488758867 push main falla → pasa en el intento 2
43493315598 push main falla
43493995633 PR docs/14-criteria-revision falla → reintento en curso

Lo que se ve en el log de las corridas que fallan (paso Analyze inert Git blobs offline):

  • Ni stderr ni el resumen del job dicen qué falló: solo code-safety-failed y Process completed with exit code 2.
  • Fallan a los ~2m14s; las que pasan tardan entre 2m21s y 2m38s e imprimen el JSON de semgrep ("status":"completed"). Parece que el error ocurre al final del análisis o en la etapa de resultados, no en un timeout global.
  • No se sube ningún artefacto con el detalle.

Propuesta

  1. Que ante cualquier fallo el script imprima en stderr y en $GITHUB_STEP_SUMMARY la etapa que falló (provision, semgrep, comparación de resultados u otra), el error sanitizado, el código de salida de la herramienta interna y, si los hay, los hallazgos que bloquean. Sin rutas privadas ni secretos.
  2. Distinguir «hallazgo bloqueante» (fallo legítimo, determinista) de «error de infraestructura o de herramienta» (con un código de salida distinto), para que el consumidor sepa si relanzar tiene sentido.
  3. Con ese diagnóstico, encontrar la causa raíz de la intermitencia y corregirla: sin reintentos automáticos que la oculten y sin relajar reglas.

Criterios de aceptación

  • Una falla de code-safety.mjs scan informa la etapa y el motivo en el log y en el resumen del job.
  • Hallazgos y errores de infraestructura usan códigos de salida distintos y documentados.
  • Causa de la intermitencia identificada y corregida, o documentada con evidencia si es externa.
  • El mismo commit da el mismo resultado en ejecuciones repetidas.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    status:needs-reviewAwaiting product review by the repository ownertype:bugBug fix

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions