Code Maps

Cómo medimos

Cada número del mapa sale de una fórmula que puedes leer. Aquí están, dibujadas.

Del repositorio a la ciudad

Cuatro pasos, todos en tu máquina.

En la versión local nada sale de tu máquina, salvo el chat.

Anatomía de un edificio

Una carpeta con código adentro. Nueve cosas se leen de un vistazo.

3 1 11 19 1 2 3 4 5 6 7 8 9
  1. 1Mástil rojo — zona caliente
  2. 2Altura = complejidad: 1.5 + 1.1 × √complejidad
  3. 3Escalones aparecen sobre 11 y 19 unidades de alto
  4. 4Color de fachada = el lente activo
  5. 5Ancho = √archivos
  6. 6 vulnerabilidades y configuración insegura, con el color de la peor
  7. 7 posibles secretos — el valor nunca se muestra
  8. 8Techo = color del barrio
  9. 9Latido = tiene una crítica

Qué cuenta como «complejidad»

Puntos de decisión por archivo, sumados por carpeta. Una heurística rápida, no complejidad ciclomática completa.

export function settle(orders, rates) {  let total = 0;   (const order of orders) {     (!order.paid  order.voided) continue;    const rate = rates[order.currency];     (order.items.length  rate) {      const item = order.items.pop();      switch (item.kind) {         'refund': total -= price(item, rate); break;         'fee':    total += fee(item, rate);   break;      }      try { audit(item); }  (e) { report(e); }    }  }  return total;}

8puntos de decisión en este archivo

La carpeta suma los de todos sus archivos

  • settle.js8
  • invoice.js14
  • tax.js5

billing/27

Altura del edificio7.21.5 + 1.1 × √27

Haz clic en un punto de decisión para quitarlo, como si simplificaras el código, y mira cómo baja la torre.

switch y try no cuentan: solo if for while case catch && ||.

De dónde salen los hallazgos

Tres instrumentos. Dos son herramientas estándar; el tercero es un puñado de reglas sin herramienta detrás.

  • Trivy

    LeeLockfiles y manifiestos (npm, yarn, pnpm, pip, poetry, go.mod, Cargo, pom, gradle), los jar compilados en Java, y Dockerfile, compose, Kubernetes y Terraform.

    EmiteVulnerabilidades y configuración insegura. La severidad es la de Trivy.

  • gitleaks

    LeeEl árbol de trabajo, con sus reglas por defecto.

    EmitePosibles secretos, hoy todos contados como Alta: todavía no se clasifican en probables y dudosos, y eso infla el riesgo. Solo se guardan la regla y archivo:línea.

  • Reglas de deuda

    LeeTodos los archivos de código, más los commits de git.

    EmiteTODO/FIXME/HACK/XXX = Baja · más de 500 líneas = Media · más de 0,25 ramas por línea en archivos de más de 50 líneas = Media · zona caliente (commits × complejidad en el 5 % superior del repositorio) = Alta.

  • Informes SARIF

    LeeLos .sarif que dejes en .codemap/: Snyk, Semgrep, CodeQL, ESLint, Checkov y cualquier herramienta que exporte SARIF 2.1.0.

    EmiteCon security-severity: vulnerabilidad (≥ 9 Crítica, ≥ 7 Alta, ≥ 4 Media). Sin él: deuda, Media si es error y Baja si no. Lo suprimido en la herramienta no entra.

Cuatro severidades

  • Crítica
  • Alta
  • Media
  • Baja

Zonas calientes

Cada punto es una carpeta real de expressjs/express: a la derecha, cuánto cambió en los últimos 12 meses; arriba, cuánta lógica tiene. El 5 % con mayor producto de los dos recibe un mástil rojo.

1101001101001000 estable y simple movido pero simple complejo pero quieto cambia mucho Y es complejo: ahí viven los bugs frontera del 5 % superior examples/auth · 1 × 17 test/acceptance · 1 × 14 examples/route-middleware · 1 × 6 examples/search · 1 × 6 examples/ejs · 1 × 3 lib · 15 × 287 test · 16 × 247 libtestexamples/auth commits (cambio) complejidad
  • Una carpeta (un edificio). Pasa el puntero para ver cuál.
  • Zona caliente: mástil rojo en el mapa y un hallazgo de deuda Alta.
  • Frontera: commits × complejidad constante. Los ejes son logarítmicos, por eso es una recta.

Riesgo de un edificio

Los pesos

Cada hallazgo parado sobre el edificio suma su peso. Esa suma es el riesgo.

Del riesgo al color

Logarítmico: una crítica ya se nota y cien no saturan.

1 alta = 5 → 0,41 1 crítica = 10 → 0,55 10 secretos = 50 → 0,89 04080 01 riesgo

La nota, en vivo

Estos deslizadores alimentan la función de puntuación del propio producto: el mismo módulo que importa el panel. Muévelos.

Hallazgos

Repositorios reales:

react/react trae en realidad 215 críticas y 1.124 altas, por encima del tope de los deslizadores. La penalización de seguridad se topa en 50 de todos modos, así que la nota no cambia.

50
200
300
4
488
751,838

Acta de inspección

Puntaje: 47 / 100 · Nota: D

47de 100

A dónde se van los puntos

  • Inicio100
  • Seguridad −50.0tope 50
  • Secretos −0.8tope 20
  • Deuda −1.9tope 30

La escala

A ≥ 90 · B ≥ 75 · C ≥ 60 · D ≥ 40 · E por debajo.

Los cuatro lentes

La misma ciudad, cuatro valores, una rampa. Cada lente normaliza a 0–1 y pinta las fachadas.

  • Riesgo

    Decidir qué arreglar primero.

    sin hallazgoscrítica

    log(1 + riesgo) / log(81)Logarítmico: una crítica ya se nota, cien no saturan.

  • Deuda

    Planificar refactors y ver qué barrio se está pudriendo.

    0 h16 h o más

    horas / 1616 horas son dos jornadas: de ahí en adelante, rojo pleno.

  • Pulso

    Distinguir código vivo de código dormido. Dormido y con riesgo es lo más peligroso.

    hace un añohoy

    1 − días / 365Tocado hoy = 1; sin tocar en un año = 0.

  • Tráfico

    Encontrar los corredores por donde pasa todo el equipo.

    0 commitsel más transitado

    commits / máx(commits)Relativo al edificio más transitado del repositorio.

Los mismos ocho edificios, pintados por cada lente.

Calor del sueloCada edificio irradia su valor sobre el suelo. La placa del barrio se tiñe con media × 1.3 y pico × 0.5.

Barrios y enlaces

Cómo una ruta se vuelve barrio

Enlaces

billing model api stripe importa lo usan

Los paquetes externos se ignoran: solo los imports que resuelven dentro del repositorio se vuelven enlaces.

Límites honestos

  • La nota es una heurística para comparar y priorizar, no un estándar.
  • La complejidad es un conteo de tokens, no complejidad ciclomática real.
  • Los escáneres de secretos marcan ejemplos en documentación y pruebas.
  • Sin lockfile ni artefactos compilados no hay hallazgos de dependencias.
  • En tu máquina el análisis no tiene tope de plan; hay un tope técnico de 10k archivos por repositorio, ajustable. En Cloud el tamaño depende del plan.
  • Pulso y Tráfico miran los últimos 12 meses de git. Un clon sin historial los deja vacíos, y el mapa lo avisa.
  • Los umbrales de la nota no están calibrados contra un corpus de repositorios: comparan bien dos versiones del mismo código, no dos empresas.

Leer el código Preguntarnos algo