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.
- RepositorioUna carpeta local o un clon.
- LeerCarpetas, líneas, ramas, historial de git, imports.
- Escanear localTrivy · gitleaks · reglas de deuda.
- Ciudad + actaEdificios, barrios, hallazgos y una nota.
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.
- 1Mástil rojo — zona caliente
- 2Altura = complejidad:
1.5 + 1.1 × √complejidad - 3Escalones aparecen sobre 11 y 19 unidades de alto
- 4Color de fachada = el lente activo
- 5Ancho =
√archivos - 6● vulnerabilidades y configuración insegura, con el color de la peor
- 7◆ posibles secretos — el valor nunca se muestra
- 8Techo = color del barrio
- 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
.sarifque 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 eserrory 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.
- 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.
- Crítica10
- Zona caliente6
- Alta5
- Media2
- Baja1
- Cada hallazgo de deuda0.2
Del riesgo al color
Logarítmico: una crítica ya se nota y cien no saturan.
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.
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íticalog(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áshoras / 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ñohoy1 − 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 transitadocommits / 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
-
1
srcmainjavacomacmebillingservice
Se quitan las carpetas de relleno:
src main java kotlin lib test. - 2 comacmebillingservice Un barrio que reúne más de la mitad de los edificios se divide un nivel más.
- 3 billing Barrio.
Enlaces
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.