El canal con la Platform

codafort platform entrega los resultados del análisis, de la máquina del dev o del CI, a la codafort Platform. Nada sale hasta que enciendes el canal.

En la Platform quedan la cola por organización, el estado de cada finding entre ejecuciones y el marcador antes/después.

Estado (septiembre de 2026): la Platform funciona como piloto que provisionamos nosotros; el SaaS en app.codafort.com todavía no está en línea. Apuntado allí, el push no entrega: en tu máquina el envelope queda en cola; en el CI, el paso falla. Para un piloto, usa la URL que recibiste (--url o CODAFORT_PLATFORM_URL).

Conectar, entregar, desconectar

codafort platform login              # abre el navegador; apruebas este equipo en la Platform
codafort platform connect            # vincula ESTE repositorio a tu organización
codafort engine analyze --source . --git --format json --output envelope.json
codafort platform push envelope.json # entrega (o deja en cola, si la Platform no responde)
codafort platform status             # sesión, repositorio vinculado y cuántos envíos en cola
codafort platform disconnect         # desvincula el repositorio y DESCARTA la cola
codafort platform logout             # revoca la sesión y borra la credencial

El login usa el flujo de autorización de dispositivo (RFC 8628): la terminal muestra un código, lo confirmas con la sesión abierta en la Platform, y la sesión creada solo entrega evidencia y lee work orders.

Qué sale, y cuándo

  • push de un coda-fort/1: el nombre del repositorio, la rama, el commit y solo los artefactos que la Platform lee, que son issues (cada finding con regla, severidad, mensaje y el fragmento de código donde está), dependencies y files. El resto del envelope queda en la máquina. Con --with-graph, va también el grafo del código que dibuja la pantalla de grafo. La ruta absoluta no sale: todo se relativiza a la raíz del repositorio, y el envío se rechaza si queda alguna.
  • push de otra modalidad (coda-dast/1, coda-iast/1, coda-crash/1…): el envelope como lo escribió su emisor.
  • Después del connect: un registro de uso por comando de codafort en este repositorio, con el verbo, el digest SHA-256 de los argumentos, cuántos findings se tocaron y la duración. Cuando el agente propone descartar un finding, va también la propuesta: el hash del finding, el tipo y el motivo que escribió, hasta 500 caracteres. Ninguna ruta de archivo y ningún código.
  • Sin login (o sin token en el CI), el push no tiene con quién hablar. Sin connect, o después del disconnect, no se graba ningún registro de uso. El connect también ata el repositorio a la organización: un push con la sesión de otra organización se rechaza antes de salir.

En el CI

export CODAFORT_PLATFORM_TOKEN=…   # token de ingesta de la organización: solo escribe, no lee ni decide
export CODAFORT_PLATFORM_URL=https://…
codafort platform push envelope.json

Con el token en el entorno, el push entrega como máquina, sin login. Si la Platform no lo recibe, el comando falla. En el CI no hay cola: se perdería junto con el runner, y el paso quedaría en verde sin entrega.

Sin red (air-gapped)

El build air-gapped no tiene el canal: los verbos de codafort platform existen y responden que no hay canal.