Gap Hunter Labs · estudio independiente de ingeniería

Rastreo cuellos de botella de rendimiento, vulnerabilidades de seguridad y fallas estructurales hasta su causa raíz, y envío la corrección.

Gap Hunter Labs es el estudio de ingeniería de Joel Díaz. Analizo sistemas complejos, audito bases de código e investigo cuellos de botella de rendimiento, vulnerabilidades críticas de seguridad (CVEs) y fallas estructurales en herramientas de desarrollo, plataformas empresariales y ecosistemas de código abierto. Sigo cada problema hasta su causa raíz y envío la solución precisa que lo elimina: desde reportes y parches upstream hasta herramientas especializadas y auditorías a medida. Cada hallazgo y corrección publicados en este sitio están respaldados por evidencia técnica verificable: tickets, pull requests, tests y trazabilidad directa hasta la fuente.

Trabajo

Investigaciones seleccionadas

Rendimiento, seguridad, fiabilidad, análisis estático y auditorías a terceros. Estado al 19 de octubre de 2026. Las mediciones de rendimiento se hicieron en IntelliJ IDEA 2026.2.3, con cada test adjunto a su ticket; los hallazgos de seguridad se verificaron en OSV contra la versión exacta fijada. Las correcciones enviadas a JetBrains son pull requests abiertos, a la espera de revisión.

N.º 01 · Rendimiento

IJPL-257909

IntelliJ Platform · Settings › Plugins · hilo de interfaz

Pull request #3701 · abierto, a la espera de revisión

Abrir Settings › Plugins tomaba casi un segundo

Causa
Para cada plugin instalado, la página volvía a armar los mapas de plugins y de módulos y recorría las dependencias de todos los plugins esenciales, en el hilo de interfaz. El costo crece con el cuadrado del número de plugins instalados, y el código ya tenía un FIXME al respecto.
Intervención
Calcular una sola vez, por conjunto de plugins, cuáles requieren los plugins esenciales, y buscar cada plugin en ese conjunto. La caché se descarta cuando se reemplaza el conjunto de plugins.
Resultado
Con 158 plugins cargados, la página tardaba entre 689–931 ms en abrir. Un solo recorrido más una consulta por plugin toma 8–22 ms y da la misma respuesta para los 158.

N.º 02 · Seguridad

reactive-commons-go#5

Bancolombia · librería de mensajería en Go · dependencias

Corregido por los mantenedores · 7 de octubre de 2026

Una librería de mensajería fijada a una dependencia con tres avisos críticos

Causa
El go.mod de la librería fijaba github.com/rabbitmq/amqp091-go en v1.10.0, dentro del rango afectado de 10 avisos publicados en septiembre de 2026: 3 críticos (una versión mínima de TLS ausente en el parser de URI, inyección de frames mediante un desbordamiento de enteros y truncamiento silencioso de cadenas cortas) y 7 altos.
Intervención
Un reporte a los mantenedores con cada aviso verificado en OSV contra la versión exacta fijada, y la versión que los corrige todos (v1.13.0).
Resultado
De 10 avisos a 0 en OSV: los mantenedores actualizaron a v1.15.0 en el pull request #6 y cerraron el reporte 3 días después de recibirlo.

N.º 03 · Auditoría a terceros

lsp4ij#1540

Red Hat · plugin LSP4IJ · hilo de interfaz

Corregido por el mantenedor · 9 de octubre de 2026

Un cliente de servidores de lenguaje que detectaba tipos de archivo en el hilo de interfaz

Causa
LSPBreadcrumbsRefreshListener.breadcrumbsChanged() corre en el hilo de interfaz y pedía ahí los símbolos del documento, lo que llega a una detección del tipo de archivo que puede leer su contenido. El issue llevaba abierto desde mayo de 2026.
Intervención
Un reporte al mantenedor con la ruta exacta en el código vigente y un arreglo sugerido: hacer la petición en un hilo del pool y dejar en el hilo de interfaz solo el reinicio.
Estado
El mantenedor hizo ese cambio el mismo día y cerró el issue. El impacto, dicho con claridad: una llamada lenta por archivo abierto cada vez que arranca un servidor de lenguaje.

N.º 04 · Fiabilidad

IJPL-200871

IntelliJ Platform · modelo del workspace · concurrencia

Corregido por JetBrains · 9 de septiembre de 2026

Una ConcurrentModificationException en el modelo del workspace

Causa
WorkspaceFileIndexDataImpl.fillPackageFilesAndDirectories() recorre un LinkedHashMap sin sincronizar que puede cambiar a mitad del recorrido.
Intervención
Análisis de causa raíz publicado en el ticket. Ubicó ese recorrido y propuso una llamada a ProgressManager.checkCanceled().
Estado
JetBrains corrigió el ticket con un cambio distinto: las consultas de nombres de paquete ahora actualizan el índice antes de leerlo.

N.º 05 · Análisis estático

IDEA-393501

IntelliJ IDEA · Java › Tests · acciones de lectura

Reportado · asignado a un desarrollador de JetBrains, abierto

Un patrón de congelamiento dentro de la búsqueda de tests del propio IntelliJ

Causa
SearchForTestsTask corre en segundo plano pero llama a onFound() con el bloqueante ReadAction.run(), sin ningún checkCanceled() en toda la clase. El Platform Blog de JetBrains nombra este patrón como una causa recurrente de congelamientos de la interfaz.
Intervención
Encontrado por Background ReadAction Freeze Companion, un control estático para este patrón. Un seguimiento mostró por qué aquí no es seguro un simple cambio a una acción de lectura no bloqueante: onFound() escribe archivos, y una acción de lectura reiniciada los volvería a escribir.
Estado
JetBrains movió el ticket al proyecto IDEA y lo asignó a un desarrollador. Las dos llamadas siguen en master a octubre de 2026.

También documentado

  • Corregido async-dataflow#148: avisos de severidad alta en dependencias directas de un servicio de entrega en tiempo real, cowboy, cowlib y plug. Los mantenedores encontraron además plug_cowboy, que el reporte había pasado por alto, y actualizaron todas en el pull request #149, fusionado el 16 de octubre de 2026.
  • Abierto IJPL-257908: la configuración de Live Templates comparaba 1.295 plantillas con 336 tipos de contexto en el hilo de interfaz después de cada tecla. Un atajo de una línea, enviado como pull request #3694, lleva la comparación de 157 ms a 0 ms.
  • Abierto Análisis de causa raíz en tickets existentes de IntelliJ Platform: una fuga de memoria a través de ProjectRootManagerImpl (IJPL-196254) y un desbordamiento de pila que vacía Git Log sin aviso (IJPL-76141).
  • Abierto IJPL-223452: una reproducción headless de escritura lenta en un archivo Java grande con la vista Structure abierta, con una mediana de 1.080 ms por tecla frente a 33 ms sin ella.
  • Abierto Tres cambios de inspecciones Java enviados como pull requests (#3697, #3698 y #3699): dos inspecciones nuevas y la extensión de una existente que había pedido un mantenedor de JetBrains.

Todos los tickets de JetBrains PlatformReportes de seguridad en código abiertoCasos de estudio de plugins

Ingeniería

Cómo se hace una investigación

El mismo método sirve para un IDE lento, una dependencia vulnerable y un fallo en el tracker de una plataforma.

  1. 01

    Encontrar la brecha

    Partir de una evidencia que alguien pueda señalar: un reporte de congelamiento, un aviso de seguridad publicado, un fallo en un tracker, un control que ninguna herramienta hace. Reproducirla en la versión exacta donde ocurre.

  2. 02

    Entender la causa

    Seguirla hasta el código que la provoca: el método que gasta el tiempo, la versión de la dependencia dentro del rango afectado de un aviso, el recorrido que no está sincronizado. Conservar la reproducción como un test o un control que cualquiera pueda volver a ejecutar.

  3. 03

    Construir la corrección

    Enviar el cambio más pequeño que elimina la causa, con evidencia de antes y después: un pull request upstream, un reporte a los mantenedores o un plugin cuando la corrección corresponde fuera de la plataforma.

Leer la metodologíaToda la evidencia de ingeniería

Servicios

Encargos

Precios publicados en USD, por encargo. El alcance por escrito, acordado antes de empezar cualquier trabajo, confirma qué nivel aplica. Entregables por escrito, asíncrono por defecto.

EncargoQué recibesTérminos
Auditoría de rendimiento de plugins Para plugins con quejas de congelamientos, demoras al escribir o CPU alta: reproducción en cada versión de IDE que soportas, mediciones en el hilo de interfaz, revisión del código en busca de patrones de congelamiento y parches con mediciones de antes y después. USD 10.500 · un plugin, hasta 3 versiones del IDE · 10 días hábiles
Ampliada: USD 15.000 · 15 días hábiles
Actualización de plugins para versiones nuevas del IDE Tu plugin compilado y verificado contra las versiones de IntelliJ que necesitas soportar: API eliminadas u obsoletas, el modo K2 de Kotlin, IntelliJ Platform Gradle Plugin 2.x y los fallos de Plugin Verifier. Menor: USD 4.500 · 5 días hábiles
Mayor: USD 9.000 · 10 días hábiles
Plugins e inspecciones a medida Inspecciones adaptadas a tu código, como API internas, formatos de secretos y patrones de seguridad, entregadas como un plugin que tu equipo instala. Los mismos controles pueden correr en GitHub Actions o GitLab CI. Hasta 3 inspecciones: USD 7.500 · 10 días hábiles
Plugin completo con CI: desde USD 15.000
Revisión de seguridad de dependencias y CI/CD Una revisión de solo lectura de los repositorios que elijas: vulnerabilidades conocidas en dependencias de producción, riesgos de dependency confusion y permisos de los workflows de CI/CD. Opcional: preparación para la Ley de Ciberresiliencia de la UE (CRA). Un repositorio: USD 4.800 · 5 días hábiles
Hasta 5 repositorios: USD 12.000 · 10 días hábiles
Preparación para la CRA: + USD 1.500 · + 2 días hábiles

Cómo empezar

  1. Escribe a gaphunterlabs@gmail.com o usa la página de contacto. Cuéntame el plugin o el repositorio y lo que necesitas.
  2. Recibes el alcance, la fecha de entrega y el precio por escrito antes de empezar cualquier trabajo.
  3. El trabajo se entrega por escrito: un informe, y un pull request cuando hay código que cambiar.

Acerca de

Joel Díaz, fundador. De formación en ingeniería de sistemas, con trayectoria en operaciones industriales y logística. Hoy desarrollo software bajo un principio operativo estricto: control de calidad riguroso, trazabilidad total y validación basada en datos reales.

Alcance cerrado · entregables por escrito · asíncrono por defecto · UTC−5
Abierto a proyectos de consultoría y a oportunidades seleccionadas.

LinkedInGitHubXRSS

Herramientas

Herramientas seleccionadas

Algunas brechas se cierran mejor fuera de la plataforma. Cada uno de estos plugins nació de una brecha documentada.

Background ReadAction Freeze Companion

IDE de JetBrains · Gratis

Brecha
El patrón de congelamiento que nombra el Platform Blog de JetBrains, una tarea en segundo plano que llega a una acción de lectura bloqueante y no cancelable, no tenía un control estático.
Corrección
Una inspección para el código de tu propio plugin. El mismo control encontró IDEA-393501 en el propio IntelliJ.

OpenAPI Companion

IDE de JetBrains · De pago

Brecha
Las reseñas de los plugins de OpenAPI existentes reportan valores $ref externos que no se resuelven, o editores que congelan el IDE con especificaciones grandes.
Corrección
Navegación de $ref resuelta por completo contra archivos locales, y una advertencia en cada $ref que no se resuelve.

Ansible Companion

IDE de JetBrains · Freemium

Brecha
Trabajar con archivos de Ansible Vault en el IDE dependía de tener instalado el comando ansible-vault.
Corrección
Cifra y descifra Ansible Vault (1.1, AES256) directamente en el editor.

Mermaid Companion

IDE de JetBrains · Freemium

Brecha
Las reseñas de las herramientas de Mermaid existentes para los IDE de JetBrains reportan advertencias y errores falsos en diagramas válidos, como identificadores con caracteres no ASCII.
Corrección
Resaltado y validación de sintaxis para archivos .mmd y .mermaid: diagramas de flujo, de secuencia y de clases.

Catálogo

El catálogo completo

146 plugins para JetBrains y 33 extensiones para VS Code, cada uno con su propia página y un precio claro: gratis, freemium o de pago. Las cifras se sincronizan dos veces al día con datos públicos de JetBrains Marketplace y GitHub (última instantánea: 2026-10-18).