Guía de la versión preliminar · 0.1.0
Trabajos duraderos y publicación de evidencias
Entiende la titularidad de las concesiones temporales, la validación de resultados, la confirmación antes del acuse y las revisiones de hallazgos.
La referencia de la API está en inglés.
La base de datos es responsable del trabajo aceptado. Una página puede recargarse, un editor desconectarse y un worker perder su concesión sin convertir al navegador en registro de lo ocurrido. Estado duradero del trabajo, transporte del analizador y evidencia publicada permanecen separados.
Identifica un comando antes de ejecutarlo
El repositorio de trabajos vincula una clave de idempotencia al cliente y al tipo de trabajo. Repetir el mismo comando devuelve el existente; usar la identidad con otro comando genera conflicto. También tiene identidad estable de ejecución externa, documentos acotados de carga y checkpoint, y revisión.
Los estados son queued, leased, running, cancelling, completed, failed y cancelled. Un envío correcto significa trabajo aceptado, no analizador ejecutado ni evidencia completa.
claim_next_job exige PostgreSQL. Bloquea filas aptas sin esperar a la seleccionada por otro worker, y gestiona concesiones vencidas y candidatos de recuperación. Las modificaciones comprueban bajo bloqueo ID, worker, intento, estado permitido y concesión vigente. Los heartbeats renuevan esa titularidad exacta. Un antiguo titular no puede terminar un trabajo por haberlo poseído antes.
Un fallo reintentable devuelve el trabajo a la cola solo dentro de límites de intentos y presupuesto. Reintentar no amplía indefinidamente la preparación. Consulta repositorio y modelo de trabajos.
Publica evidencia antes de permitir limpieza
- Persiste comando y trabajo
La admisión registra una operación deliberada. Una respuesta 202 no es su resultado final.
- Reclama un intento aislado
El worker verifica identidad, intento y concesión. Los heartbeats renuevan esa titularidad exacta.
- Ejecuta trabajo de servicio acotado
El trabajo conserva su identidad exacta; reconectar no crea un sustituto.
- Valida y conserva resultados
El worker comprueba páginas y escribe hallazgos aceptados en PostgreSQL.
- Confirma el resultado exacto
Solo después de persistir confirma el vínculo y permite liberar salida temporal.
- Lee el resultado duradero
Tras cancelación, timeout o desconexión, recarga el trabajo original y sus resultados antes de reintentar.
El analizador sella un resultado normalizado y expone manifiesto y páginas acotadas. El worker no confunde su disponibilidad con publicación duradera.
- Valida el manifiesto y vincula ejecución, digest de solicitud y resultado, digest del manifiesto de artefactos y procedencia en el checkpoint duradero.
- Inicia una transacción PostgreSQL, bloquea el análisis padre y rechaza la publicación si ya tiene hallazgos o índices de artefactos. Recupera cada página acotada y valida sus identidades, cursor, ordinales, cantidades de bytes, hashes, valores canónicos, orden y huellas únicas. Oculta los datos sensibles e inserta los hallazgos admitidos de esa página sin ejecutar el commit.
- Contrasta el flujo completo y el resumen con el manifiesto. Admite los artefactos atestiguados exactos, actualiza las revisiones y registra
scanner_persisted=trueen esa misma transacción. - Establece que la transacción se confirmó antes de enviar ACK para el vínculo exacto de ejecución, solicitud y resultado.
- Permite borrar el resultado temporal y continúa finalización de análisis y control. Un resultado persistido cuya limpieza requiere reconciliación sigue siendo distinto de evidencia no publicada.
Es un límite de inserción única. Un reintento debe recuperar el checkpoint confirmado, no sustituir hallazgos y borrar la revisión del operador. El código rechaza conflictos con scan_evidence_conflict. La transacción de persistencia controla esta regla.
Si la transacción revierte, las inserciones parciales no se vuelven autoritativas. Si el resultado es incierto, el worker contrasta estado duradero antes de limpiar. Una vez persistido scanner_persisted=true, la recuperación solo envía ACK y no vuelve a descargar e insertar la colección. Un 404 del analizador solo puede contar como ya limpiado en esta recuperación ya persistida. La recuperación del acuse acota la excepción.
Limita el transporte temporal aparte del almacenamiento
| Límite | Contrato de esta revisión |
|---|---|
| Registro canónico de hallazgo | Hasta 32 KiB, incluido el salto JSONL. |
| Página de hallazgos | Hasta 128 hallazgos y respuesta codificada de 4 MiB, reservando espacio del sobre. |
| Resultado de ejecución | Hasta 50.000 hallazgos y 336 MiB para flujo y manifiesto. |
| Registro final conservado | Cuatro entradas por defecto y hasta 384 MiB de resultados. |
| Ventana de recuperación | 1.800 segundos por defecto, hasta 3.600 como máximo. |
La cola temporal del analizador es tmpfs privado, no almacén duradero, artefacto descargable o copia de seguridad. No se expulsan resultados sin acuse solo para liberar un hueco final; la presión de capacidad puede rechazar trabajo. El límite temporal sigue vigente. Reiniciar pierde registro local y secreto de cursores, y elimina archivos antiguos reconocidos de la cola.
Los cursores vinculan proceso, ejecución, solicitud, resultado y posición siguiente. No sirven para otro resultado. El registro de ejecuciones implementa este transporte temporal.
Conserva evidencia útil sin publicar informes brutos
Los hallazgos conservan identidad normalizada de analizador y regla, gravedad, ubicación, mensaje, fragmento, huella y metadatos acotados. Se ocultan sus datos sensibles antes de publicarse y de insertarse en la base. La ocultación reconoce patrones y estructuras sensibles conocidos; no garantiza eliminar cualquier secreto.
El límite de artefactos admite SBOM Syft CycloneDX JSON saneados y acotados. Valida la ruta dedicada sin seguir enlaces, vincula procedencia de bruto a saneado e indexa la identidad resultante. La descarga comprueba tamaño y digest contra el índice y copia bytes verificados a almacenamiento de respuesta acotado. Stdout, stderr, SARIF, JSONV2 y JSONL brutos no son artefactos publicados.
Lee ocultación de datos sensibles del analizador y admisión y descarga de artefactos. Reducen exposición; no vuelven seguro ejecutar código hostil arbitrario.
Continúa el ciclo de vida tras publicar
Los hallazgos nuevos empiezan open, sin supresión ni exención, en revisión uno. Las siete decisiones son open, needs_review, gate_exempt, accepted_risk, ignore, false_positive y fixed. Son estados seleccionables, no un flujo lineal obligatorio.
open y needs_review participan en los recuentos. gate_exempt y accepted_risk siguen sin supresión pero no cuentan para el control. ignore, false_positive y fixed suprimen el hallazgo. Las cinco exclusiones exigen razón no vacía. Cada cambio comprueba revisión esperada, actualiza metadatos de revisión y renueva resumen y evaluación del control.
Marcar fixed no inspecciona un archivo editado. Un nuevo análisis aporta evidencia nueva y abre sus hallazgos. Coincidir analizador y huella entre análisis del proyecto aporta historial de apariciones, no hereda decisiones anteriores. Borrar elimina la fila y es una acción separada con comprobaciones de revisión y trabajo activo.
Páginas y detalles están ligados a revisiones de colección para evitar sobrescrituras silenciosas desde vistas obsoletas. Los campos Advisor son distintos de los de ciclo de vida. El consejo no suprime, acepta riesgo ni cambia el control automáticamente. Consulta modificación de ciclo de vida y flujo de hallazgos.
Trata cancelación y recuperación como resultados observables
La solicitud de cancelación se persiste y puede ganar la carrera con la finalización. Los estados finales permanecen finales. Las operaciones de caché rechazan cancelar durante confirmación o activación, una vez cruzado su límite protegido. Cancelar no deshace generaciones activadas ni retira datos Advisor entregados.
Trabajo terminado, análisis completo y control aprobado son resultados distintos. Solo la evidencia completa llega a la evaluación normal; las decisiones no reparan cobertura ausente. La implementación del control conserva la diferencia.
Los trabajos duraderos permiten reconciliar interrupciones. No establecen aceptación completa de recuperación ante fallos o desastres. El auxiliar actual de copia es experimental, no atómico y deshabilitado sin aceptación explícita para pruebas desechables. Sigue la guía de recuperación y conserva identidades exactas al evaluar fallos.