Conn2Flow
Navegação das docs

SDD

req-143: Biblioteca de assets externos — eliminar dependência de CDN em runtime

11 bibliotecas de terceiros carregadas por CDN, referenciadas em 27 arquivos:

  • Status do intake: ready-for-intake

  • Data: 2026-08-29

  • Origem: pergunta do Engenheiro Chefe durante o BATCH-144 ("você acha ruim ter dependência de CDN?"), depois do padrão de ponto único adotado em bibliotecas/editor-texto.php

  • Classificação: arquitetura de assets, privacidade/LGPD, resiliência, supply chain

  • Batch candidato: BATCH-146


1. Inventário medido

11 bibliotecas de terceiros carregadas por CDN, referenciadas em 27 arquivos:

Origem Bibliotecas
[REDACTED] Fomantic-UI, jQuery, Quill, SortableJS (@latest), FingerprintJS
[REDACTED] CodeMirror (11 arquivos entre core, addons e temas), jQuery, PDF.js, QRCodeJS
[REDACTED] @tailwindcss/browser
[REDACTED] TinyMCE (ver req-142)

2. Problemas concretos (não teóricos)

  1. sortablejs@latest em 16 ocorrências — versão NÃO fixada. Qualquer publicação no npm entra direto em produção sem revisão. É a dívida mais urgente: um release quebrado do Sortable derruba os CRUDs de ordenação sem que ninguém tenha mudado nada no projeto.

  2. jQuery vem de DOIS CDNs (jsdelivr e cdnjs) — risco de duas versões na mesma tela.

  3. Privacidade/LGPD — cada visitante do site publicado tem o IP entregue a jsdelivr, Cloudflare e unpkg. Para projetos como o [REDACTED] (Ministério Público), é conformidade, não preferência.

  4. Ponto único de falha externo — CDN fora do ar, bloqueio de rede corporativa/governamental ou instalação em intranet quebram o gestor.

  5. O benefício histórico não existe mais — o cache compartilhado entre sites acabou quando os navegadores passaram a particionar o cache HTTP por origem (2020). Hoje se paga DNS + TLS extra por domínio sem ganho de cache.

3. Escopo proposto

Módulo 1: biblioteca assets-externos

  • gestor/bibliotecas/assets-externos.php, no mesmo padrão de editor-texto.php: registro central de nome → versão → arquivos, com assets_externos_incluir('codemirror') usado pelos módulos.

  • Resolução: serve o arquivo local versionado quando existe; cai no CDN como fallback para não quebrar instalação que ainda não rodou o vendor.

Módulo 2: comando c2f assets:vendor

  • Baixa as bibliotecas declaradas para gestor/assets/vendor/<lib>/<versao>/, confere integridade e registra a versão. Roda no build/deploy, não em runtime.

Módulo 3: migração dos 27 arquivos

  • Substituir as tags diretas pela chamada da biblioteca, começando por SortableJS (fixar versão) e jQuery (unificar a origem).

Módulo 4: exceção declarada

  • @tailwindcss/browser é ferramenta de EDIÇÃO (compila no navegador dentro do editor), não asset de visitante. Avaliar se permanece em CDN, com a exceção registrada e justificada.

4. Critérios de aceite

  1. Nenhuma versão flutuante (@latest) em asset de terceiro.

  2. jQuery com origem única.

  3. Página pública renderiza integralmente com a rede externa bloqueada (teste com CDNs indisponíveis).

  4. Um único ponto declara nome e versão de cada biblioteca.

  5. Suítes verdes e teste que falha se um @latest ou uma tag direta de CDN reaparecer no core.

5. Ordem sugerida

sortablejs@latest primeiro (risco ativo), depois jQuery, depois o restante. O inventário completo está em sdd/implementation/BATCH-144.md.

O Futuro é Híbrido: Humano + IA.

O Conn2Flow é a ferramenta. Se você precisa do Arquiteto para desenhar a estratégia da sua empresa usando essa tecnologia...

Contrate Consultoria Especializada