-
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)
-
sortablejs@latestem 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. -
jQuery vem de DOIS CDNs (
jsdelivrecdnjs) — risco de duas versões na mesma tela. -
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. -
Ponto único de falha externo — CDN fora do ar, bloqueio de rede corporativa/governamental ou instalação em intranet quebram o gestor.
-
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 deeditor-texto.php: registro central denome → versão → arquivos, comassets_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
-
Nenhuma versão flutuante (
@latest) em asset de terceiro. -
jQuery com origem única.
-
Página pública renderiza integralmente com a rede externa bloqueada (teste com CDNs indisponíveis).
-
Um único ponto declara nome e versão de cada biblioteca.
-
Suítes verdes e teste que falha se um
@latestou 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.