id: "REQ-284" title: "Cache do Tailwind por recurso que não sobrevive a outra pasta ou terminal, e varredura automática que lê os seeds" status: "implemented-pending-homologation" date: "2026-10-19" author: "executor" target_repo: "conn2flow" batch: "BATCH-293" topology: "solo" autonomy: "autonomo_monitorado" origin: "Pedido do Engenheiro Chefe Humano (2026-10-19), a partir do incidente da REQ-141 do conn2flow-site"
req-284: cache do Tailwind por recurso portável e varredura automática sem seeds
Relato
"Toda hora fica recompilando sem precisar." Um project:update-all [REDACTED] levou cerca de 20 minutos e manteve o Lab em manutenção; quase todo o tempo foi recompilação de .precompiled.css que não tinha mudado.
Diagnóstico (medido em 2026-10-19)
-
A chave do cache depende do caminho absoluto.
tailwind_recursos_fingerprint()usa o caminho de cada fonte como chave (realpath). Toda página Tailwind recebe os modais de sistema do core como fonte automática (req-148), resolvidos emSYSTEM_PATH. Rodando o core de outra pasta (worktree, outro clone) ou com a letra do drive em outra caixa (c:\no terminal do VS Code,C:\no PowerShell), a chave muda e o cache cai inteiro.-
Medido: core em
conn2flow-req141-main→ 88 de 1295 fingerprints iguais no site, 1207 recompilados em 528 s; os recursos do core, 523 recompilados, 0 em cache, 99 s. -
O conteúdo já é normalizado (
\r\n→\n) desde a req-114; a quebra de linha não é a causa.
-
-
Layouts e bundles varrem o projeto inteiro, inclusive os seeds. O input temporário importa o input central (
@import "tailwindcss", detecção automática) e o CLI roda comcwdna raiz do projeto. O Tailwind lêdb/data/*.json(126 MB no site),logs/,backups/etc. a cada compilação.-
Medido: o CSS da
platform-editorcompilado às 13:28 manteve classes que não existiam mais em HTML nenhum ([scrollbar-width:none],sm:flex-wrap): elas estavam só noPaginasData.part-001.jsonantigo, regravado depois do Tailwind. -
Experimento isolado: com
cwdna raiz, a classe que só existe emdb/data/*.jsonentra no CSS; comcwdvazio, não.
-
Escopo
-
Fingerprint portável: cada fonte entra pela raiz a que pertence (
gestor:para o projeto ou o próprio core,core:para fontes do core usadas por projeto) com caminho relativo, comparação sem caixa no Windows. Versão do manifesto vai para 2 (recompilação única na primeira execução). -
Inputs de layout e bundle excluem da detecção automática o que não é autoria:
db/data,logs,backups,temp,.tailwind-build,node_modules,vendor. A varredura de PHP e JS dos módulos continua (layouts dependem dela). -
Testes PHPUnit: fingerprint igual com a raiz em outra pasta e com outra caixa de drive; diferente quando o conteúdo muda; input temporário com as exclusões.
-
(Achado na medição) Recursos de texto entram nos
*Data.jsoncom quebra de linha LF: o mesmo arquivo vinha com\r\n(checkout comautocrlf) ou\n(saída do Tailwind) e o checksum e a versão mudavam sem mudança de conteúdo. -
(Achado no deploy) O diff de choque do manifesto de instalação não carrega arquivo acima de
INSTALACAO_DIFF_MAX_BYTES: um seed de 83 MB marcado como editado derrubava a API de deploy com 500. -
Skills
c2f-executor-agentec2f-project-pipeline-and-tasks: mudança só de projeto vai porproject:deploy;project:update-allsó com core e projeto mudando juntos.
Fora do escopo
-
Pôr no fingerprint os arquivos achados pela detecção automática (o cache continua sem enxergar mudança em PHP/JS de módulo); registrado como observação.
-
Mudança no
css:rebuilde na escolha de comando dos agentes (vai para skill/memória).
Critérios de aceite
-
Duas compilações seguidas do
conn2flow-site, uma da árvore principal e outra de uma worktree do core: a segunda com 0 recompilados. -
CSS de layouts e bundles sem classes que só existem em
db/data; nenhuma classe de PHP/JS de módulo perdida (diff de seletores medido). -
PHPUnit verde.