Auditoría Exhaustiva Abril 2026
User value
No entrega funcionalidad visible directamente, pero impacto concreto: páginas cargan más rápido (−70 KB fuentes variables, Brotli −20% assets, bundles JS con caché por módulo), sistema más observable (Web Vitals RUM en tiempo real: LCP, CLS, INP, FCP, TTFB por path en VictoriaMetrics), pipeline CI fiable y reproducible. CSS con variables de marca coherentes en 91 puntos, eliminando inconsistencias visuales acumuladas.
Cómo usarla (N/A — refactor)
Auditoría de deuda técnica. No hay nueva superficie de API ni flujo de usuario. Cambios transparentes: 509 endpoints Ninja sin breaking changes, imports externos resuelven via __init__.py en paquetes nuevos.
Implementación (fases F0-F5)
Auditoría ejecutada en una sesión (17-04-2026) con Claude Opus 4.7, cubriendo 6 frentes paralelos: CSS, JS, Python/Django, Templates, Assets/Build, Stack/Arquitectura.
F0 — Preparación (3ae2f97): baseline bib_stats, plan en TASK.md.
F1 — P0 Quick Wins (e69fd63): Brotli (brotli==1.1.0), fuentes variables Google (1 request vs 8, −70 KB), drop_console/sourcemap:false en Vite, extracción CSS banner impersonation. CSP y rate-limit descartados (redundantes con middleware custom).
F2 — P1 Backend + DX (db84f67, 9d435b9, 0b71d08): ruff==0.9.6 (1802 auto-fixes + 13 unsafe), biome, pre-commit, pytest-xdist + pytest-cov threshold 18%. Split 3 megaficheros: core/api.py (1168 LOC → 10 submódulos), monitoring/api/signage.py (1259 LOC → 7 submódulos + signage_service.py con select_related elimina N+1), racks/api/export.py (1152 LOC → 7 submódulos + export_formatter.py).
F3 — P1 Frontend (36d15f5, 53ff699): rollup-plugin-visualizer + Vite manualChunks ECharts/Konva/xterm. Limpieza CSS huérfano (−85 LOC, 7 selectores muertos, 3 vars muertas). Template _trash_item.html unificado blueprints/racks. Corrección pin ruff==0.9.6 en CI (evitaba drift a 0.15.11) y split pytest para tests RLS que compartían rol PostgreSQL.
F4 — P2 Modernización (801ad31, 0d53b8e, 5f054c0, 1693f83, a3280d9): router AI providers (ai_fallback(): Gemini→DeepSeek→Claude), helper paginate(), 353 sustituciones CSS (57× color literal → var(--accent), 262× rgba → color-mix()), @layer en 17 archivos con −33 !important, Playwright E2E smoke (health, login, static), Web Vitals RUM con sendBeacon → Prometheus Histogram.
F5 — Consolidación (c8c99e5, b178690): bump APP_VERSION = "1.0.58", CHANGELOG, RELEASE_NOTES, CLAUDE.md, README, TASK.md, WORKLOG. Informe publicado en Wiki CreaRack Tech — Reports. Tag v1.0.58.
Backlog post-fase (473c244, da80f61, 1066ac4, 788b19c): Ruff 226→0 violations, ECharts tree-shake (−402 KB, −36%), Playwright flows reales (login + rack create + terminal UI).
Harness auto-sync (ca3c238, 7846329, 534e3cc): cron Windows Task Scheduler (04:00) con bib-reindex.ps1. Handler bib_index_ast optimizado (db.batch() + replace_app). Re-indexación: 242s → 13s (18×).
Decisiones
ruff==0.9.6pin exacto:ruff>=0.9.6resolvía a 0.15.11 en CI, reglas C420/SIM910 no en ignore. Pin exacto evita rule drift silencioso.django-axes/django-cspdescartados: middleware custom multi-tenant ya con CSP y rate-limit granulares por organización, superior a soluciones genéricas.schemas.pyno fragmentado: 290 LOC con 10 dominios no justifica split — fragmentación excesiva perjudica navegabilidad sin reducir acoplamiento real.- ECharts tree-shake diferido a F1: migración preparada (entry point
echartsLoaderen Vite) pero no activada hasta backlog por requerir refactorEChartsService.js.
Commits relacionados
| Commit | Fase | Descripción |
|---|---|---|
3ae2f97 | F0 | Plan Auditoría en TASK.md |
e69fd63 | F1A | Brotli + variable fonts + Vite |
db84f67 | F2AB | Ruff + CI integration |
9d435b9 | F2C | Split core/api.py |
0b71d08 | F2D | Split monitoring/api/signage.py |
36d15f5 | F3A | Vite manualChunks + Biome |
53ff699 | F3C | CSS orphan cleanup + template dedup |
5f054c0 | F4CDE | CSS modernization |
0d53b8e | F4A | Split racks/api/export.py |
801ad31 | F4B | AI providers router |
1693f83 | F4F | Playwright E2E smoke |
a3280d9 | F4G | Web Vitals RUM |
c8c99e5 | F5 | Bump v1.0.58 + docs |
1066ac4 | Backlog B | ECharts tree-shake −402 KB |
788b19c | Backlog C | Playwright flows reales |
Véase también
- [[decision—20260417—ruff-pin]]