Análisis estático · Java & Kotlin

Encuentra el código que oculta fallos antes de que producción los revele

DiagScope lee el código fuente Java y Kotlin e informa de lo que destruye silenciosamente la evidencia de diagnóstico — excepciones tragadas, transacciones ausentes, llamadas HTTP sin timeout. Ejecútalo en tu build de Maven, deja que tu asistente de IA lo ejecute, o úsalo por separado. Nada sale de tu máquina.

En tu build de Maven
$ mvn io.github.diagscope:diagscope-maven-plugin:0.1.8:scan
Standalone, con Homebrew
$ brew tap DiagScope/tap && brew install diagscope

Plugin de Maven  ·  Asistentes de IA  ·  CLI standalone  ·  Java & Kotlin  ·  Spring / Quarkus / Micronaut

terminal
$ mvn verify [INFO] --- diagscope:0.1.8:scan (default) @ payment-service --- [INFO] DiagScope 0.1.8 analyzed 12 files in 340 ms. [INFO] Findings: 5 | Parse failures: 0 | Flow boundaries: 6 [ERROR] Gate failed: [ERROR] - 1 finding(s): severity >= ERROR, confidence >= HIGH [INFO] BUILD FAILURE
Tres caminos

Elige dónde encaja en tu flujo

01 — En tu build

Plugin de Maven

mvn verify falla según la tolerancia que definas. Una entrada en el POM, nada más que instalar.

Configurar →
02 — Con tu asistente de IA

Revisa el código generado

Instrucciones y un hook hacen que el asistente ejecute DiagScope antes de decir que terminó.

Ver cómo →
03 — Standalone

Sin dependencia en tu proyecto

Una CLI para cualquier build y cualquier CI, con Homebrew o un JAR. Para cuando un plugin de build no es bienvenido.

Instalar →
En tu build de Maven

Rompe el build, no la producción

Un plugin de Maven ejecuta DiagScope durante mvn verify y rompe el build según la tolerancia que elijas. Está en Maven Central: no hay que añadir ningún repositorio ni instalar nada más.

Añádelo al POM

Una entrada de plugin. Sin gate configurado solo informa, así que puedes adoptarlo primero y endurecerlo después.

<plugin> <groupId>io.github.diagscope</groupId> <artifactId>diagscope-maven-plugin</artifactId> <version>0.1.8</version> <executions><execution> <goals><goal>scan</goal></goals> </execution></executions> </plugin>

Elige el rigor

El mismo diagscope.yml que rige la línea de comandos rige el build. O decide por ejecución, o por rama con un perfil.

$ mvn verify -Ddiagscope.failOn=ERROR \ -Ddiagscope.failOnConfidence=HIGH $ mvn verify -Ddiagscope.gateProfile=release

Ejecútalo una vez

Sin editar el POM: útil para probarlo en un proyecto, o como un paso propio del pipeline.

$ mvn io.github.diagscope:diagscope-maven-plugin:0.1.8:scan \ -Ddiagscope.failOn=ERROR

Maven se ejecuta en JDK 17 o superior. En un build multimódulo cada módulo se juzga por separado, los módulos pom se omiten, y un único diagscope.yml en la raíz rige todos. El analizador viene con el plugin: una descarga de unos 78 MB, en caché después.

Con asistentes de IA

Deja que tu asistente de código revise su propio trabajo

Cuando el equipo genera código con un asistente, DiagScope puede ejecutarse antes de que el asistente diga que terminó. Así las excepciones tragadas y los logs ausentes se corrigen en la misma sesión y no en producción.

Configúralo una vez

Escribe un bloque corto de instrucciones en AGENTS.md y CLAUDE.md y añade un hook de Claude Code que escanea los archivos modificados cuando termina la tarea. El contenido existente nunca se sobrescribe.

$ diagscope init-agent

Salida pensada para asistentes

Texto simple y compacto, con el peor problema primero y una línea de corrección para cada uno. Unos 3 KB donde el informe en Markdown tiene 22 KB. El código de salida sigue viniendo de tu gate.

$ diagscope scan --format AGENT \ --files src/main/java/PaymentService.java

Elige el rigor

La tolerancia vive en diagscope.yml, así que se revisa junto con el código. Falla en errores de alta confianza, tolera algunos avisos o define un perfil más estricto para ramas de release.

gate: failOn: - severity: ERROR confidence: HIGH maxFindings: { WARNING: 20 }

El hook automático es para Claude Code. Otros asistentes leen las instrucciones de AGENTS.md y ejecutan el mismo comando, pero nada los obliga. Un escaneo tarda de 1 a 15 segundos según el tamaño del proyecto, por eso la comprobación se ejecuta al final de la tarea y no tras cada edición. Se le indica al asistente que no silencie un hallazgo sin preguntarte.

Standalone

Sin dependencia en tu proyecto

El mismo analizador funciona por separado. Úsalo cuando la empresa no quiere un plugin en el build, cuando el build es Gradle, o para mirar un repositorio que no es tuyo. No se añade nada al proyecto.

Instala

Homebrew trae Java 17 consigo. Sin Homebrew, descarga el JAR y ejecútalo con Java 17 o superior.

$ brew tap DiagScope/tap $ brew install diagscope

Escanea un proyecto

Sin paso de build. Endpoints REST, listeners de Kafka y jobs programados se detectan como entrypoints; los informes quedan en target/diagscope o build/diagscope.

$ diagscope scan --project .

Gate de CI — solo hallazgos nuevos

Falla el build solo por los hallazgos introducidos en este pull request y deja los existentes para después.

$ diagscope scan --project . --update-baseline $ diagscope scan --project . --baseline --fail-on ERROR

Explica un hallazgo, consulta las reglas

La descripción completa, por qué importa y cómo corregirlo; el catálogo lista todas las reglas con severidad, categoría y versión.

$ diagscope explain SILENT_CATCH $ diagscope rules
Qué encuentra

Código que falla silenciosamente

Excepciones, transacciones, concurrencia, Kafka, rendimiento, seguridad y más. Cada hallazgo identifica el entrypoint que llega al problema.

SILENT_CATCH

Excepción silenciada

Capturada y nunca logueada ni relanzada — el fallo simplemente desaparece.

FUTURE_GET_WITHOUT_TIMEOUT

Llamada bloqueante sin timeout

Un hilo queda bloqueado indefinidamente esperando un resultado que puede no llegar.

MISSING_TRANSACTION_ANNOTATION

Escritura sin transacción

Si un paso posterior falla, la primera escritura queda confirmada sin poder revertirse.

HTTP_TIMEOUT_NOT_SET

Llamada HTTP sin timeout

Un upstream lento agota el pool de hilos y derriba todo el servicio.

N_PLUS_ONE_QUERY_RISK

Query N+1 en bucle

Una llamada a base de datos dentro de un bucle — escala linealmente y se degrada con los datos.

KAFKA_SEND_RESULT_IGNORED

Envío Kafka no observado

El resultado del publish se descarta — los fallos son invisibles para quien llamó.

Reporte

Cómo es el reporte

Abre report.html en cualquier navegador. Es un único archivo autocontenido: sin servidor, sin red. Ordena qué corregir primero, filtra por severidad y confianza y muestra la ruta de llamadas desde el entrypoint hasta cada hallazgo.

Reporte HTML de DiagScope: resumen ejecutivo por regla, severidad y confianza, lista
Reporte real generado a partir de un proyecto de ejemplo pequeño. Abrir el reporte de ejemplo →

Pruébalo en tu propio código.

Un comando, o una entrada en el POM.

$ mvn io.github.diagscope:diagscope-maven-plugin:0.1.8:scan
o standalone: brew tap DiagScope/tap && brew install diagscope