Conn2Flow
Navegação das docs

SDD

BATCH-253 — REQ-244

Status: implemented-pending-homologation. Branch: feat/req-244. Site coordenado: REQ-109 / BATCH-103, feat/req-109.

Status: implemented-pending-homologation. Branch: feat/req-244. Site coordenado: REQ-109 / BATCH-103, feat/req-109.

Escopo

Entrega completa de CSS/head/tema e assets oficiais ao iframe de widgets; geometria da área útil; paridade de Apresentações. Worktrees isoladas, sem alteração da req-243.

Live Todo

  • [x] Backend: colunas opcionais, template independente do CSS compilado, contrato de tema e assets.

  • [x] Frontend: Tailwind Browser, Lucide e gestor.raiz no documento isolado; geometria.

  • [x] Site: renderizador de Apresentações e altura embedded.

  • [x] Vitest Core 553 e Site 13; PHPUnit Site 31 / 1679 asserções.

  • [x] PHPUnit Core: 1629 testes / 16228 asserções, sem falhas/erros; 4 skipped e deprecações.

  • [x] Pipeline oficial no Lab (Core e Site compilados sem erros).

  • [x] Paridade visual, catálogo, controles e resize: 29/29 verificações do navegador.

  • [ ] Homologação humana / consolidação em main.

Evidências

Teste PHP atualizado falha no código anterior por ausência de .search-icon do template quando css_compiled está preenchido. Core resources:sync --resource=dashboard-cards-tailwind: saída 0, 2 recursos compilados; aviso de PUBLIC_PATH não informado para dist.

O teste JS de hidratação também foi executado com C2F_DASHBOARD_SOURCE apontando à fonte anterior: falha em flex-col, como esperado. No código final ele verifica ainda a ordem base → tema → compilador → CSS do widget.

Roteiro de navegador: widgets-browser.cjs. Preferências restauradas no finally.

Resultado final em 2026-10-06: 29/29 verificações, oito slides com cores/fontes/gradientes iguais à referência em 1366 e 390 px, setas/pontos/tela cheia, resize e cinco widgets adicionais. Piloto no Dashboard e referência. Sem exceções JS ou console.error. Pipeline final com saída 0, fontes deste lote sem divergência de hash; css:rebuild sem erros. Registro de métricas em checks.json.

Implementação e revisão

dashboard_ajax_widget_render() consulta as colunas disponíveis, registra o template antes da autoria e reúne os incrementos das filas de head/CSS. O template não depende mais de css_compiled vazio. O retorno fornece o contrato de tema e URLs oficiais de Tailwind Browser/Lucide. O iframe permanece com origem opaca (sandbox="allow-scripts"); a inicialização de ícones e resize roda dentro dele.

Cards usam flex em coluna, body sem padding e iframe com largura/altura de 100%. A raiz do srcdoc identifica o contexto Dashboard. No Site, o renderizador inline de Apresentações inclui template e todas as folhas do registro; o deck embedded ocupa a altura útil somente nesse contexto. css_precompiled do registro é opcional porque a tabela real não tem essa coluna em todas as instalações.

A comparação ampliada aos oito slides encontrou cinco diferenças tipográficas no desktop quando o compilador vinha por último. O srcdoc agora separa o bloco inicial marcado layout-precompiled e o coloca antes do tema/compilador; as demais folhas ficam depois. Assim o tema preserva Inter e as folhas do widget mantêm a precedência da página convencional. Não há ajustes específicos às classes do piloto.

O teste real encontrou document.cookie proibido no aviso de cookies: no Dashboard o controlador usa seu comportamento existente de demonstração, com decisão apenas em memória. Um teste simula getter/setter que lançam SecurityError e verifica inicialização e aceite sem acessar cookies. Páginas convencionais mantêm a persistência existente.

Revisão findings-first: sem achados bloqueantes no código final. Conferidos filtros de idioma/status/target, escape SQL, envelope AJAX, sandbox, precedência template/autoria, assets e versões. Os artefatos gerados alheios foram retirados do diff nas worktrees próprias; nenhum arquivo da REQ-243 foi alterado.

Comandos e limites da evidência

  • Core: npm run test, 48 arquivos / 553 testes; vendor/bin/phpunit -c phpunit.xml, 1629 testes / 16228 asserções. Quatro skipped e deprecações já reportadas pela suíte.

  • Site: npm run test, 13 testes; PHPUnit com sdd/validation/req238-phpunit.xml, 31 testes / 1679 asserções. PHP executado no Lab sobre as fontes das worktrees via /mnt/c; o Site não tem composer.json próprio.

  • As primeiras execuções PHP falharam por CRLF em testes que extraem funções/trechos literalmente (Stripe/CssRebuild no Core e ArquivosApi no Site). Normalização local para LF resolveu; esses arquivos não têm alteração semântica no lote.

  • Compilação inicial: resources:sync --resource=dashboard-cards-tailwind e project:sync-resources [REDACTED] (equivalente oficial para compilar o Site a partir do CLI Core). Pipeline completo sequencial: project:update-all [REDACTED] --no-wait.

  • docs:audit: 0 erros, 276 avisos de documentação anterior; nenhuma assinatura de biblioteca ou tabela foi alterada.

  • Lab compartilhado: a publicação da REQ-243 sobrescreveu temporariamente esta versão. Republicação feita depois de seu resultado de navegador, conforme autorização humana. A evidência se refere à versão publicada por este lote; outra publicação posterior pode substituí-la.

  • O rsync usa preservação de arquivos mais novos: a primeira republicação deixou Dashboard/cookie-consent divergentes no hash. As datas das fontes deste lote foram atualizadas e o pipeline repetido. Diferenças restantes de interface, admin-arquivos/admin-cron e galleries pertencem à REQ-243 e foram preservadas; dez sobras de assets/3d-catalog no destino são anteriores ao lote. A sessão de agente foi renovada após a sessão antiga deixar de autenticar.

  • A referência de Apresentações usa outro contexto de navegador: compartilhar o contexto fez o Chrome entregar cliques ao elemento iframe do pai. Com contextos separados, eventos reais de mouse chegaram ao deck e a entrada em tela cheia funcionou. Escape não encerra fullscreen no headless; o roteiro usa o próprio botão para sair.

  • O catálogo adicional é verificado quanto a renderização, compilador e exceções JS. Paginação remota, submissão de formulários e navegação externa desses módulos não foram alteradas nem homologadas funcionalmente neste lote.

  • Memória de execução saudável (22.407 bytes / 158 linhas): não reescrita nem podada.

Correção posterior: precedência entre folhas no iframe (2026-10-06, executor da REQ-243)

Sintoma: primeiro slide certo, slides seguintes empilhados numa coluna só. Não aparecia no primeiro slide, o que escondeu o defeito das conferências anteriores.

Causa: o iframe recebia a folha completa gerada pelo compilador do navegador e, depois dela, a folha pré-compilada do template (4 KB, parcial). As duas ficam na camada utilities; na mesma camada vence a que vem depois. A utility simples da folha parcial (grid-cols-1, flex-col) vencia a responsiva da folha completa (md:grid-cols-[1fr_auto_1fr], md:flex-row). Medido no slide 3: grid-template-columns de uma coluna com a regra md: presente no CSS.

Correção: em dashboard.js o compilador entra depois das folhas do widget, então a folha que ele gera é a última da camada. CSS de autoria não tem camada e continua vencendo. No site (REQ-109), presentations_widget_render_inline deixa de incluir a pré-compilada do template: com ela a página pública passava a ter o mesmo defeito (a página só funcionava no Lab porque a REQ-109 não estava publicada).

Evidência: sdd/validation/req244/widget-apresentacao-precedencia.cjs, 24/24. Navega pela seta nos oito slides e compara 27 propriedades computadas de cada elemento entre o widget e a página na mesma largura: zero diferença. Confere também que nenhuma pré-compilada vem depois da folha gerada e que galleries, forms-search, cookie-consent, menus e pages-index seguem inteiros. Imagens em sdd/validation/req244/evidencias-precedencia/. Guarda em tests/Unit/JS/dashboard.widgets-req236.test.js (folha parcial antes do compilador).

Limite: a ordem depende de o compilador do navegador anexar a folha ao fim do head no momento em que roda; o roteiro falha se isso mudar numa troca de versão. Um registro salvo pelo editor (css_compiled) segue a mesma ordem e não foi exercitado com apresentação editada.

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