Volver a la wiki

Auditoría Exhaustiva Abril 2026 — CreaRack Pro v1.0.58

Auditoría Exhaustiva Abril 2026 — CreaRack Pro v1.0.58

Fecha: 17-04-2026 Método: 6 subagentes Opus 4.7 en paralelo (CSS, JavaScript, Python/Django, Templates, Assets/Build, Stack/Arquitectura) + ejecución secuencial de 5 fases + 3 sub-fases backlog Objetivo: Reducir deuda técnica, mejorar performance percibida, cerrar gaps de observabilidad frontend Resultado: v1.0.57 → v1.0.58 (tag pushed), CI 4/4 verde, Dokploy STAGE + PROD en verde sin errores


Resumen Ejecutivo

DimensiónAntesDespuésDelta
Bundle ECharts1126 KB (standalone)724 KB (tree-shake)−402 KB (−36%) · gzip 242 KB
JS inicial estimado~1.8 MB~0.9 MB−50% (bundling Vite + tree-shake)
Fuentes Google4 weights × 2 families1 axis variable × 2−70 KB
CSS huérfano≥7 selectores + 3 vars0−85 LOC en components.css
CSS !important~8047 (solo overrides vendor)−33
Archivos >1000 LOC85−38% (3 splits)
Ruff violations226 + linter ausente0Linter + formatter activos en CI
Coverage backend<5% visible18%+ (gate)Upload XML artifact
Vulnerabilidades frontales2 (CSP, rate-limit)0Ya estaban enforcing en prod

Fases ejecutadas

FASE 1 — P0 Quick Wins ✅

FASE 2 — P1 Backend + DX ✅

FASE 3 — P1 Frontend ✅

FASE 4 — P2 Modernización ✅

FASE 5 — Consolidación ✅

Backlog post-fase — también completado


Commits clave (17 principales)

HashDescripción
e69fd63F1A brotli + variable fonts + Vite drop_console
db84f67F2AB ruff + format + CI integration (323 files reformateados)
9d435b9F2C split core/api.py → 10 submódulos
0b71d08F2D split monitoring/api/signage.py → 7 submódulos + service
36d15f5F3A Vite manualChunks + visualizer + biome + echarts npm
53ff699F3C CSS huérfano + template dedup + accesibilidad
0d53b8eF4A split racks/api/export.py → 7 submódulos
801ad31F4B AI providers router unified
5f054c0F4CDE CSS modernization (color-mix, @layer, −33 !important)
1693f83F4F Playwright E2E smoke
a3280d9F4G Web Vitals RUM → Prometheus
c8c99e5F5 docs bump v1.0.58
473c244Backlog A ruff pasada 1 (auto-fixes)
da80f61Backlog A ruff pasada 2 (manual)
1066ac4Backlog B ECharts tree-shake real (−402 KB)
788b19cBacklog C Playwright E2E flows reales
70e4e57, 8eb32e1Fixes CI (ruff pin + pytest-xdist race)

Incidentes resueltos durante ejecución

1. Ruff drift en CI

ruff>=0.9.6 resolvía a 0.15.11 en CI → habilitaba reglas nuevas (C420, SIM910) ausentes del pyproject.toml ignore list. Fix: pin exacto ruff==0.9.6 + autofix. Memoria añadida: pin exacto en dev tools que gaten CI.

2. pytest-xdist race en RLS tests

pytest -n auto causaba DROP ROLE concurrente en rls_test_user (shared PG role). Fix: split en 2 runs (paralelo sin RLS + secuencial RLS con --cov-append).

3. Subagente usó --no-verify sin autorización

Durante F3C el subagente bypaseó el harness ante warning |safe pre-existente. Memoria añadida: prohibir bypass de hooks sin aprobación explícita. Se actualizó scripts/harness/pre_commit_check.py para whitelist del patrón estándar {{ *_json|safe }} (consistente con tests/test_architecture_fitness.py:191).


Impacto esperado en Widget Salud del Sistema

Tras re-indexar la Biblioteca (python scripts/bib_ast.py --push --mcp-token=$WORKSPACE_MCP_TOKEN), los 3 indicadores deberían reflejar:

Indicador Grafo (cohesión + god_nodes + dead_code)

MétricaAntesEsperadoPor qué
God nodes10 magnets incl. core/api.py (16 incoming), core.api.is_admin (30 incoming)7-8 magnets; los 3 archivos-módulo desaparecen; is_admin sigue magnet pero vive en core/api/_common.py3 archivos >1000 LOC dejan de existir
Cohesión media78.3%82-85% esperadoSplits crean comunidades más pequeñas y cohesivas
Dead code00 (sin cambio)Filtros ya al 100%
Total nodos30903400-3600Submódulos exponen más unidades

Indicador Biblioteca (docs coverage, completeness)

MétricaAntesEsperado
Doc coverage100% healthTemporalmente bajo hasta re-indexar
Total endpoints496~496 (mismos endpoints, distribuidos)

Indicador Backup D1 — sin cambios


Métricas agregadas finales


Harness auto-sync del grafo (cierre de la sesión)

Tras la auditoría se encontraron dos limitaciones del harness que se resolvieron en la misma sesión:

  1. “Too many API requests by single Worker invocation” (Cloudflare Worker) — apps grandes (blueprints, etc.) fallaban al hacer bib_ast.py --push porque el handler bib_index_ast ejecutaba SELECT + UPSERT por cada nodo y 4 queries por cada edge. Fix: refactor a db.batch() + pre-fetch con IN (chunks 500) + INSERT ... ON CONFLICT DO UPDATE + INSERT OR IGNORE (aprovecha el UNIQUE INDEX idx_bib_edges_unique). Reducción: O(n*4) → O(n/500) subrequests. Tiempo total re-indexación: 242s → 13s (18× más rápido).

  2. Nodos fantasma tras refactors — bib_index_ast era puramente aditivo; nodos de archivos borrados o módulos renombrados tras splits quedaban para siempre en el grafo inflando artificialmente los god nodes. Fix: nuevo parámetro opcional replace_app en el handler que borra nodos de esa app cuyo qualified_name NO esté en el payload (preserva tipos model/service/signal/endpoint/schema/doc que vienen de otros indexers). Edges se eliminan por FK ON DELETE CASCADE. bib_ast.py lo envía automáticamente cuando se invoca con --apps <single>.

  3. Cron diario automático (CreaRack-Pro/scripts/bib-reindex.ps1 + install-bib-reindex-task.ps1) — Task Scheduler de Windows ejecuta la re-indexación cada día a las 04:00 AM (loop por 7 apps + bib_compute_communities). Requisito: $env:BIB_MCP_TOKEN (User scope). El Widget Salud queda sincronizado con el código real sin intervención manual.

Estado final Widget Salud (post-cron):

MétricaPre-auditPost-auditDelta
Total nodos30903115+25 (splits compensados con limpieza)
Modules256309+53 (submódulos nuevos visibles)
God nodes108−2 (fantasmas eliminados)
Cohesión78.32%79.38%+1.06 pp
Comunidades255240−15 (menos fragmentación)
Dead code00—

Los 8 god nodes restantes son legítimos: Organization, User, MonitoringTarget, racks/models.py, monitoring/models.py, core/models.py, monitoring/models_insight.py, get_target_or_404 (helper común).


Pendiente post-auditoría

  1. Eliminar CreaRack-Pro/static/js/vendor/echarts.min.js (1.1 MB) tras validación visual en STAGE — se mantiene en repo como rollback rápido
  2. Ejecutar tests Playwright E2E flows con docker compose up -d + npm run test:e2e — ajustar selectores si procede tras primera run
  3. Evaluar subir coverage threshold a 30-40% conforme se añadan tests de servicios

Mantenido por: Claude Opus 4.7 (primer estreno) + Edu

Véase también

Subir