Comparativo lado a lado do cenário baseline contra o estado pós-remediação — 7 repositórios, 6 fases
| Repositório | Antes | Depois | Redução | Críticas |
|---|---|---|---|---|
| engine (NestJS) | 50 (2C, 29H) | 15 (0C, 2H) | -70% | 2→0 |
| engine (Legacy) | 56 (2C, 41H) | 17 (0C, 16H) | -70% | 2→0 |
| orquestrator | 63 (4C, 29H) | 23 (0C, 5H) | -63% | 4→0 |
| executor | 44 (1C, 29H) | 10 (0C, 0H) | -77% | 1→0 |
| front | 47 (3C, 16H) | 22 (0C, 4H) | -53% | 3→0 |
| TOTAL | 260 | 87 | -67% | 12→0 |
| Repo | Tests Antes | Failing Antes | Tests Depois | Failing Depois | Stmts% |
|---|---|---|---|---|---|
| engine | 33 | 1 | 96 | 0 | 1.93%* |
| executor | 983 | 20 | 983 | 0 | 97.27% |
| orquestrator | 0 | 0 | 39 | 0 | 27.52% |
| infosec | 0 | 0 | 22 | 0 | 15.92% |
| cron | 0 | 0 | 0 | 0 | 0% |
| cronjob | 2 | 0 | 2 | 0 | 5.81% |
| front | 11 | 0 | 11 | 0 | — |
| TOTAL | 1.029 | 21 | 1.153 | 0 |
| Métrica | Antes | Depois |
|---|---|---|
| Health checks padronizados | 0 / 7 | 7 / 7 |
| Circuit breakers | 0 | 5 circuits · 3 repos |
| Logging JSON estruturado | 1 / 7 (executor) | 7 / 7 (nestjs-pino) |
| RequestId tracking (X-Request-Id) | 0 / 7 | 7 / 7 |
| Multi-stage Docker build | 3 / 7 | 7 / 7 |
| npm ci --omit=dev no runtime | 1 / 7 | 7 / 7 |
| USER node (non-root container) | 0 / 7 | 6 / 6 NestJS |
| .dockerignore | 1 / 7 | 7 / 7 |
| Graceful shutdown (SIGTERM) | 0 / 7 | 7 / 7 |
| stop_grace_period Docker | 0 / 8 | 8 / 8 (30s) |
| Base images otimizadas | node:18/22 full | alpine / bullseye-slim |
| Startup scripts | npm start (watch mode) | node dist/main |
| Serviço | Tipo | Antes | Depois | Ganho |
|---|---|---|---|---|
| core-service | DB Query | O(N) queries/client | O(1) batch Op.in | N-1 eliminadas |
| engine | Algorítmico | O(n²) find() loop | O(n) batch + Map | Quadr→Linear |
| orchestrator | Cache | ~50-200ms/req HTTP | ~1ms cache hit | 50-200× |
| front | Bundle | moment.js + lodash | dayjs + lodash-es | -80KB+ gzip |
| cron | Memory | Timer leak + retry ∞ | Set tracking + MAX=10 | 0 leak |
| engine + executor | Observability | Sem métricas | Prometheus histograms | GET /metrics |
p95 = 22.95ms · p99 = 32.52ms · max = 77.96ms · throughput = 99.5 req/s · event loop lag p99 = 11ms · heap ~88MB estável · 0 circuit breaker triggers
| Dimensão | Antes (Baseline) | Depois (Pós-Correção) | Fase |
|---|---|---|---|
| Vulnerabilidades de código | 24 identificadas (4 Críticas) | 59 corrigidas · 7 pendentes | F1-F2 |
| Vulnerabilidades npm | 260 total · 12 Críticas | 87 total · 0 Críticas | F2.6 |
| Autenticação | 10 rotas expostas · JWT fraco | 14 controles · 3 guard types | F1.5-F1.6 |
| TypeScript | strict: false em todos | strict: true em 6/7 | F3.1-F3.3 |
| Testes | 1.029 (21 failing) · 4 repos sem | 1.153 (0 failing) · guards 100% | F4 |
| CI/CD | Zero pipelines · zero hooks | 7/7 GH Actions · 7/7 Husky | F4.3-F4.4 |
| Health checks | Inconsistentes · 0 padrão | 7/7 padronizados + Docker | F5.1 |
| Resiliência | 0 circuit breakers · 0 shutdown | 5 circuits · graceful shutdown | F5.2-F5.5 |
| Logging | console.* / texto livre | JSON pino · requestId · OTel | F5.3 |
| Docker | Single-stage · root · full image | Multi-stage · USER node · alpine | F5.4 |
| Frontend UX | Delete sem confirm · erros mudos | ConfirmDialog · error handler | F6.1-F6.2 |
| Documentação | READMEs boilerplate · 0 docs | 8 READMEs · 5 arch · 25 Outline | F6.3-F6.5 |
| Performance | N+1 queries · O(n²) · no cache | Batch · O(n) · LRU · Prometheus | perf |