-
Status do intake: ready-for-intake
-
Data: 2026-08-28
-
Origem: solicitação do Engenheiro Chefe após constatação de perda de características visuais e classes utilitárias do Tailwind CSS em páginas publicadas (ex:
http://localhost/[REDACTED]/artigos/teste-de-pagina/), onde elementos como a legenda de imagem aparecem desalinhados (em itálico à esquerda) enquanto no editor de templates (admin-templatesvia CDN emhttps://novo.[REDACTED].com/admin-templates/editar/?id=template-artigo) renderizam corretamente alinhados à direita com classes utilitárias ativas -
Classificação: arquitetura CSS (3 camadas), paridade Tailwind CLI x CDN, roteador (
gestor.php), módulosadmin-templatesepublisher-pages, injeção de dependências de templates -
Batch candidato: BATCH-144
1. Contexto e Diagnóstico Técnico Aprofundado
O sistema Conn2Flow opera com uma arquitetura de estilização em três camadas para o Tailwind CSS v4:
-
css: CSS autoral customizado escrito pelo usuário ou desenvolvedor; -
css_precompiled: CSS Tailwind compilado offline pelo Tailwind CLI durante release/deploy/sincronização de recursos físicos; -
css_compiled: CSS Tailwind compilado no navegador pelo@tailwindcss/browserquando o conteúdo é criado ou modificado no Editor Visual / Live Editor.
Apesar desse modelo, constatou-se uma divergência crônica entre o que o operador visualiza no Editor HTML (CDN em tempo de execução) e o que é entregue no navegador final da página publicada.
Evidências Medidas no Caso Concreto ([REDACTED])
Inspecionando o ambiente local ativo (http://localhost/[REDACTED]/artigos/teste-de-pagina/) e sua respectiva base MySQL ([REDACTED]):
-
Na Tabela
paginas(registroteste-de-pagina):-
framework_css:tailwindcss; -
css:NULL; -
css_precompiled:NULL; -
css_compiled:NULL. Constatação: A publicação não possui nenhum CSS próprio compilado ou pré-compilado associado diretamente a ela.
-
-
No HTML da Página Pública (
GET /artigos/teste-de-pagina/):-
O elemento de legenda abaixo da capa possui o markup:
<figcaption class="ml-auto text-right"> <p class="text-sm md:text-base font-medium opacity-70 leading-relaxed border-r-2 border-(--color-mp-ink)/20 italic pr-4"> Imagem Capa ou Qualquer Outro Descritivo da Imagem </p> </figcaption> -
No
<head>, a folha de estilo injetada como<style data-c2f-css-role="compiled">contém apenas as regras base de Preflight, com o bloco@layer utilities100% vazio. -
Nenhuma folha com papel
page-precompiledouresource-precompiledreferente ao artigo é entregue. -
Resultado Visual: As classes
.text-right,.ml-auto,.border-r-2,.pr-4, etc., não existem em nenhuma folha CSS da página. O navegador aplica o alinhamento de texto padrão (esquerda), desfazendo o layout planejado.
-
-
No Módulo
admin-templates(template-artigo):-
Na tabela
templates, o registrotemplate-artigopossuicss_precompiledcom 8.286 bytes de regras utilitárias compiladas (incluindo.italic,.border-r-2, etc.). -
No editor visual (
admin-templates/editar/?id=template-artigo), o iframe carrega o script@tailwindcss/browser@4.3.0. O compilador no navegador varre dinamicamente o DOM do iframe e injeta em tempo real todas as classes presentes no markup (como.text-righte.ml-auto). -
Por essa razão, dentro do editor visual o template funciona e parece perfeito, gerando uma falsa paridade.
-
2. Causas-Raiz Identificadas
Causa-Raiz 1: Ruptura de Herança de CSS entre Templates e Publicações no Roteador Público
Quando uma página de publicação (como /artigos/teste-de-pagina/) é requisitada:
-
gestor_roteador()emgestor/gestor.phpbusca na tabelapaginasondecaminho = 'artigos/teste-de-pagina/'. -
A página é encontrada, mas o roteador apenas inclui:
-
O CSS do layout (
layout-precompiled); -
O CSS da própria página (
page-precompiled), que no caso de publicações éNULL; -
Os CSS de widgets invocados (
dependency-precompiled).
-
-
O roteador nunca consulta a tabela
templatesnem carrega ocss_precompiledoucss_compileddo template pai (template-artigo) vinculado ao publicador (publisher_id = 'artigos'). -
Essa lacuna já havia sido sinalizada normativamente na DEC-109 §5 ("Template escolhido dinamicamente é dependência da página... omitir o campo foi a causa da imagem clínica sem max-h-56"), mas o carregamento no runtime público de publicações permaneceu pendente.
Causa-Raiz 2: Descompasso entre Recursos em Banco e o Compilador Offline (CLI)
-
O compilador Tailwind CLI (
tailwind-recursos.phpacionado viac2f resources:sync) apenas varre arquivos físicos estáticos no diretórioresources/. -
Templates e páginas criados ou editados no banco de dados através dos painéis administrativos (
admin-templates,publisher-pages,admin-paginas) não possuem representação física em disco na hora da edição. -
Se o projeto utiliza um arquivo central (ex:
contents/tailwindcss/output.cssouproject-cssviaconfig-project.php), esse bundle estático ignora todas as classes introduzidas exclusivamente via banco de dados, a menos que tenham sido previamente catalogadas em arquivos estáticos.
Causa-Raiz 3: Não Extração de css_compiled ao Salvar Publicações (publisher-pages)
-
No módulo
publisher-pages, o usuário preenche campos de formulário (Quill, inputs, imagens) e a página substitui as variáveis viagetUpdatedHtmlWithValues(). -
No momento do envio (
submit), o formulário anexahtmlWithValues, mas o campocss_compilednão é re-extraído peloHtmlEditorCssCapturecontra o HTML preenchido, sendo gravado comoNULLna tabelapaginas.
Causa-Raiz 4: Conflitos de Precedência entre Cascata Monolítica e Classes de Recurso
-
Arquivos de projeto (
project-css) carregados fora de camadas normatizadas (@layer) competem diretamente com os seletores utilitários. Se uma regra de projeto ou reset possuir maior especificidade que um@layer utilities, a utility do Tailwind é sobreposta.
3. Escopo Técnico Requerido
Módulo 1: Resolução Dinâmica de CSS de Templates no Roteador (gestor.php)
-
Localização:
gestor/gestor.php(no fluxo degestor_roteador()e montagem de recursos da página). -
Ações:
-
Ao processar uma página com
publisher_id:-
Identificar o
template_idvinculado consultando o registro do publicador empublisher; -
Carregar o
css_precompilede ocss_compileddo template correspondente na tabelatemplates; -
Injetar esses estilos através de
gestor_pagina_recursos_incluir()com o papel normativodata-tailwind-role="dependency-precompiled"(ouresource-precompiled); -
Assegurar que os seletores utilitários do template estejam presentes na resposta final de qualquer artigo ou publicação pública renderizada.
-
-
Módulo 2: Extração e Persistência de css_compiled no publisher-pages
-
Localização:
gestor/modulos/publisher-pages/publisher-pages.phpepublisher-pages.js. -
Ações:
-
Durante a criação (
adicionar) e edição (editar) de uma página de publicador:-
Copiar ou herdar o
css_compiledecss_precompileddo template para a linha depaginasno ato do salvamento; -
Garantir que o payload de POST envie o
css_compiledatualizado para que a linha empaginasnão fique com valoresNULL.
-
-
Módulo 3: Paridade e Blindagem da Extração no admin-templates
-
Localização:
gestor/modulos/admin-templates/admin-templates.phpeadmin-templates.js. -
Ações:
-
Assegurar que ao salvar um template, o
updateCSSCompilede oHtmlEditorCssCapturegravem fielmente todas as utilities geradas no campotemplates.css_compiled. -
Garantir que alterações de classes no template reflitam imediatamente no
css_compiledpersistido no banco de dados.
-
Módulo 4: Governança de Camadas contra project-css Monolítico
-
Localização:
gestor/gestor.php(gestor_css_precompiled_ordenare montagem do cabeçalho). -
Ações:
-
Garantir que a ordem de inclusão em
gestor.phppreserve a precedência:$css_padrao$\rightarrow$$project-css$\rightarrow$css_precompiled(layout $\rightarrow$ dependência/template $\rightarrow$ página) $\rightarrow$css_compiled$\rightarrow$cssautoral. -
Prevenir que regras sem
@layerde arquivos legados de projeto sobrescrevam utilitários sem declaração explícita.
-
Módulo 5: Testes Automatizados Unitários e de Integração
-
Localização:
tests/Unit/PHP/etests/Feature/. -
Cobertura:
-
Teste no roteador comprovando que páginas públicas com
publisher_idcarregam o CSS utilitário do template associado; -
Teste no
publisher-pagesvalidando que a inserção de publicação persiste o CSS utilitário na tabelapaginas; -
Teste garantindo que classes utilitárias específicas (como
.text-right,.ml-auto,.border-r-2) estejam presentes no HTML entregue e não sejam descartadas por bundles de página.
-
4. Critérios de Aceite e Validação
-
Paridade Visual Idêntica: A página
http://localhost/[REDACTED]/artigos/teste-de-pagina/deve exibir a legenda da imagem alinhada à direita, com borda lateral e estilo idênticos ao visualizado no editor deadmin-templates. -
Presença das Classes no CSS: O CSS emitido no
<head>da rota pública deve conter as definições de.text-right,.ml-auto,.border-r-2,.pr-4e demais utilities usadas no template. -
Persistência no Banco: Ao salvar templates no
admin-templatesou páginas nopublisher-pages, as colunas de CSS compilado/pré-compilado devem ser preenchidas, sem permanecer comoNULL. -
Sem Efeito Cascata Negativo: A inclusão do CSS do template não deve quebrar ou desalinhar outros componentes (menus, cabeçalhos, rodapés) nem sofrer anulação por
project-css. -
Suíte Automatizada 100% Verde: Todos os testes unitários (
composer testenpx vitest run) devem passar sem erros ou regressões.