# Auditoria de conformidade — Baluarte v1.5

## Veredito

**Aprovado no escopo automatizável e na revisão integrada.** A v1.5 preserva a identidade de família, cobre de forma explícita o corpus visual inventariado do ClickAgents e elimina as objeções substantivas encontradas nas rodadas críticas.

## Baseline inventariado

- origem: `clickagents-frontend`;
- branch: `luiz-ui-consistency`;
- commit: `9776b768…`;
- 82 arquivos TSX visuais;
- 959 classes CSS;
- corpus registrado por SHA-256 em `reports/clickagents-inventory-v1.5.json`.

## Cobertura

A matriz contém 118 decisões:

- 48 componentes core;
- 43 extensões;
- 22 padrões compostos;
- 5 capacidades de domínio.

Todo item possui destino explícito. `Documentado` significa que camada, origem e maturidade estão registradas; `implementado` significa que também existe contrato HTML/CSS de referência nesta versão.

A matriz exaustiva é evidência de governança, não navegação principal. `components.html` apresenta 22 exemplos implementados em seis grupos visuais; extensões, padrões e domínio permanecem na cobertura até possuírem specimen validado.

O piloto D1 de Content Design mantém 2.817 caracteres normativos em onze módulos visíveis. A hipótese de menor custo de localização é testada sem alegar redução do volume ou da carga cognitiva total.

Talk começou como segundo domínio read-only no commit `c722a919…` e fechou o piloto visual no commit `db0245dc…`. Fontes/ícones locais, Tabs completas, forced colors, reduced motion, touch e baseline de resposta passam em 24/24 perfis e 30 capturas. O veredito aprova a fatia e o handoff, não o produto inteiro: sete extensões centrais, owners, zoom real de 400% e o entrypoint Rules delegado ao Thiago permanecem abertos.

## Checks estáticos

`scripts/audit_portal.py` verifica, entre outros:

- oito páginas HTML e estrutura compartilhada;
- versão 1.5 em páginas e documentos;
- links, IDs, botões, estilos e eventos inline;
- tokens CSS e sintaxe JavaScript;
- contagens do catálogo e da matriz de cobertura;
- ausência de identidade visual por produto;
- iconografia única em Phosphor local e de–para completo;
- um único peso e glyph mapeado para cada ícone;
- ausência de ligatura, sprite ou família iconográfica anterior;
- ausência de override isolado de `font-size` em ícones;
- ausência do segmented legado;
- 28 seletores obrigatórios do contrato squircle (distintos dos 32 casos de render: 8 páginas × 2 viewports × 2 temas);
- suporte real do navegador, estilo computado e interativos não classificados;
- ausência de Button pill nos specimens promovidos;
- dez contratos de alinhamento ao perímetro em 100 combinações de tamanho, tema, page scale, conteúdo e estados;
- fonte final Noto Sans variável local, pesos 100–900, `font-optical-sizing: auto`, `font-synthesis: none` e CLS observado desde antes da carga até `document.fonts.ready` + dois frames;
- 580 medições de estado e viewport visual 720×550px validado em browser page scale 200%;
- proibição de compensação por transform ou offsets posicionais;
- cinco eixos normativos de Icon Button, Circle restrito por contexto estrutural, tamanhos 32/40/44 e glyphs 16/20/24;
- Scrollbar temática, Emoji 16/20/24/32, Picker 378/42/320px com dez colunas fixas, Tabs 14px/400/21px com indicador móvel de 2px, footer do Media Card, Publicado azul e Live verde validados em nove perfis e três motores, incluindo claro/escuro, RTL, reduced motion e fixture pública sem `portal.css` ou `portal.js`;
- cinco elevações distintas, Media Card sem mudança de borda, marca oficial adaptativa, swatches sem faixa interna e arquivos icon-only validados em quatro perfis e três motores;
- shape 4/8/12/16/24, 56 extensões, Comandos essenciais, Button, radio preenchido, respiro mínimo, cobertura compacta e processo responsivo validados em seis perfis e três motores;
- largura intrínseca, Button público sem CSS do portal, seis slots de ícone, token accent canônico, sete rotas de radius, cinco specimens de elevação com 80px e largura uniforme fluida de 150–224px, proximidade, fade, Table e localização na página validados em sete perfis e três motores, incluindo 320px e page scale 200%;
- lote visual de Foundations aprovado em oito seções, com 24 capturas focadas, 55 swatches reais, pares de contraste vivos, specimens normativos preservados e zero alteração em componentes públicos, sidebar ou runtimes congelados;
- lote visual da rota Componentes aprovado na visão geral e nos seis grupos funcionais, com seis landmarks numerados, 35 demos rotuladas, oito modelos de especificação, 24 capturas focadas, zero overflow e preservação dos componentes públicos, pilotos D1, sidebar e runtimes congelados;
- prova inicial do Talk preservada com manifesto de 56 arquivos e nove capturas; fechamento reconciliado por commit limpo de 41 arquivos, 30 capturas, 32 IDs de ledger, dois builds verdes e hashes congelados de `components.css`, `components.js` e `portal.js`; assets locais eliminam requests remotos e ligaturas Material;
- Canvas 46vi, Fontes da pesquisa 30,6667vi/100vi móvel, Composer 9px nas ações, Menu 7px nas superfícies, glyph legado 16/15 normalizado a 15/15px por altura 36px, glyph 20px e padding inline 8px, itens Squircle 24px estáveis por estado, fonte 14px/400, ícone 20px, gap 8px, altura 36px e cor `--text` invariável por estado e perigo invariável e anatomia vertical 10/10 validados em nove perfis e três motores;
- três cópias preservadas do ClickAgents comprovam consenso em dois fades de aresta não interativos, adotados apenas como princípio de continuidade;
- subset exato do commit `9776b768…`, cinco arquivos e oito capturas fornecidas preservam a evidência geométrica de Canvas, SourcesCanvas, Composer e menus;
- subset preservado de seis arquivos extrai 60 contratos do menu lateral; a fixture mede nos três motores header 77px, label 24px, primeira superfície 57px e gap visual legado 26,5px, sem transportá-lo como token; referência 260/48px preservada e refinamento Baluarte 260/49px com área interna colapsada de 48px, insets 6px/2px e eixo invariável em 24px a 0px do inline-start, insets expandidos 7/7px, item 36px/44px coarse, Squircle/fallback 16px estável, 20px entre grupos, 10px entre título e primeiro destino, títulos em `--nav-section-title` com contraste ≥4,5:1 e drawer 260px passam em vinte e três perfis e três motores, incluindo coarse × LTR/RTL em cada motor, drawer fechado, rolagem até o último link e labels com p/ç/g em line-box integral de 21px sem `text-box` destrutivo; Entity Item integrado passa nos mesmos perfis com 36px/44px coarse, mark 20px, label a 35px, mark central no rail, current/false-current, hover/foco/active, disabled, loading não bloqueante (`aria-busy`) com hover/foco/active preservados, nome acessível e spinner aberto/oculto no colapso na fixture pública; o título “Meus agentes” passa pelos marcos determinísticos 60/160/139/140/220/340ms e por reduced motion sem espera permissiva nos três motores, incluindo rail, título, labels, Entity Item e conta, e footer/conta provam 60px, separador full-bleed conectado ao divisor vertical aberto e transparente no colapso, base fixa, glyphs/marks 20px e cor `--text` coerentes entre rail/sidebar/Menu/entidades, conta fechada 36 × 36px fine/44 × 44px coarse, avatar 20px no eixo 24px em todos os checkpoints, line-heights 16/15px, gap 2px, runtime público, ARIA e evento único; shell com dois headers de 54px, divisor vertical contínuo, zero linha inferior, marca/glyph e ações a 14px, Gaussian 20px/1,12, ações desktop 32px e controle contextual 36×36px fine/44×44px coarse, radius 16px, Sidebar Simple Regular 20px, logo sem fundo em canvas 32px e fallback Fill 24px passa em aberto/fechado, LTR/RTL e três motores; aberto usa inset final/superior fine de 9px, fechado preserva insets 6px fine/2px coarse e eixo 24px; comando usa `--text`, cursores LTR/RTL e centro zero; fora de hover/foco desaparece expandido, enquanto o logo permanece no repouso e ao percorrer vazios colapsados; clique/toque nos vazios expande sem interceptar ações; brand usa 18px/500/22px + 14px/500/20px; todos os oito ícones primários persistem no rail mesmo com grupo fechado, com labels a zero, contexto oculto, preferência e foco restaurados e reversões protegidas por revisão; grid/layout fecham em 160ms, textos em 60ms, destinos fechados surgem entre 60–160ms e retornam fechados em 160ms na expansão, layout abre em 220ms e textos em 200ms após 140ms, com marcos determinísticos 60/160/139/140/220/340ms; elementos ocultos passam por `inert` + `aria-hidden`, Tab/foco seguro e restauração só após 340ms; reduced motion usa duration ≤0,01ms, delay zero e restauração imediata; trigger móvel sincronizado ao drawer em 961/960px e shell sem JavaScript com controles inoperantes ocultos passam nos três motores; drawer aberto isola header/main/skip link, overlay fecha e restaura foco imediatamente antes de inertir o drawer, reabertura não sofre timer obsoleto e resize aberto/em fechamento 960→961px mantém foco visível; avatar e danger preenchido passam com 4,54:1 e 4,57:1;
- seis URLs OpenAI em desktop/mobile registram 12 capturas e o padrão 64/500, 48/500 e 30/500; oito CSS ClickAgents preservados registram 500 declarações, 70 pares explícitos e quatro outliers de representação;
- tipografia proporcional passa em 12 células de fixture e 32 células de portal nos três motores: displays 28–64px em 500, títulos 18–24px em 550, monotonicidade não estrita, 320px/zoom equivalente 400%, fallback, PT-BR longo, ar/he/ja/ko/zh, string contínua, zero overflow e zero falha;
- densidade editorial D1 passa em dois blocos/2.817 caracteres e onze módulos, nove perfis nos três motores, seis fallbacks sem JavaScript, 18 consultas na busca real, 33 aberturas por fragmento, ordem acessível e oito capturas desktop/mobile × claro/escuro;
- D2 reconcilia 565/565 unidades em 530 manter, 17 encurtar e 18 dividir; total −85 palavras, +54 blocos e +0 headings; os oito heroes passam por revisão editorial e visual em desktop/mobile; 72 perfis completos e 48 leituras sem JavaScript passam sem alterar HTML, comportamento ou apresentação dos specimens;
- gutters lógicos do conteúdo principal passam em 144 perfis de rota/largura/motor e nove estados adicionais collapsed/RTL, com delta ≤0,5px e zero overflow;
- 40 grupos colapsáveis usam heading/Button, sentence case 14px/400, 10px até o primeiro destino, 20px entre blocos e contraste secundário ≥4,5:1 constante sem hover por `--nav-section-title`, links em `--text` no corpo padrão 14px/400, chevron Bold 10px/slot 16px, alinhado 3px mais abaixo por layout com opacity 100% estável e abertura animada; nove perfis, três motores, três fallbacks sem JavaScript e IDs incrementais únicos passam sem eventos de inicialização;
- oito fixtures negativas e duas positivas de Circle, mais matriz Chromium/Firefox/WebKit com page scale 125% no Chromium;
- zero alias paralelo `icon-button` ou `--sm`; `.b-icon-btn--circle` permanece a única variante circular oficial e todo hook contextual possui base core;
- radiogroup e associação tabs/tabpanel.

Resultado: **nenhuma falha automatizável encontrada**. O relatório de máquina está em `reports/audit-static-v1.5.json`.

## Auditoria ao vivo

O portal expõe checks da página carregada para:

- estilos inline estáticos;
- botões sem `type`;
- eventos inline;
- IDs duplicados;
- segmented legado;
- override de tamanho de ícone;
- contrato Phosphor, caixa iconográfica e ausência da família anterior;
- contrato squircle em controles, navegação, cards interativos, picker, arquivos, ferramentas, links, ações e composer;
- contrato de radio;
- contrato de tabs.

## Renderização e interação

`scripts/render_portal.py` executou 32 casos em Chromium:

- oito páginas;
- seis arquivos CSS, incluindo Phosphor e Noto Sans locais, e três JavaScript, com runtime público separado do portal;
- desktop 1440×1100 e mobile 390×844;
- temas claro e escuro;
- recursos externos bloqueados para validar o fallback offline;
- zero overflow horizontal, IDs duplicados, botões sem tipo ou erros de runtime;
- radio validado por clique e setas;
- tabs validadas por teclado e visibilidade do tabpanel;
- squircle validado em Chromium registrado, com suporte CSS verdadeiro, zero falha computada e zero interativo arredondado sem classificação;
- composer validado com borda de foco reforçada e paridade de 9px nas laterais/base;
- toolbar, file card, navigation rail e dialog validados com delta geométrico zero e tolerância técnica de 0,1px;
- 66 elementos únicos de Icon Button no corpus e 600 observações visíveis em seis perfis × dois temas, com zero falha de contrato, contexto ou geometria de estado;
- fallback simulado aprovado; forced colors preserva shape, exclusões e foco representativo sem reivindicar auditoria integral de contraste;
- doze capturas de shape, dez referências de alinhamento, dezesseis capturas de alinhamento geradas, onze de Icon Button, trinta de representação, treze de proporção/contenção, oito de workspace, vinte e oito de menu lateral — incluindo logo claro/escuro, hover do controle, hover no vazio com logo persistente, Entity Item expandido/colapsado, loading e movimento do título —, sete de grupos colapsáveis e vinte e quatro do lote visual de Componentes, com navegador, viewport, tema, origem e validação registrados;
- red team dedicado ao Sidebar Simple, identidade colapsada, fallback e hit area encerrou sem objeções substantivas após testar separadamente link, switch, slider e tabindex;
- red team de ritmo e adoção aprovou 20px entre grupos, títulos secundários com 6,21:1/6,01:1, boundary público, cinco trilhas, ledger e perfil piloto do ClickAgents sem objeções substantivas;
- rodada Prism dedicada aprovou título–primeiro destino 10px e a apresentação temporária dos oito ícones primários no rail após corrigir foco, separação preferência/apresentação, coarse 44px e reversões por última intenção;
- red team tipográfico reprovou a primeira proposta por leading 1,00, ambiguidade 24/500, fallback, CLS, reflow e adoção; após as correções, aprovou sem BLOCKER/MAJOR residual;
- doze capturas externas registram a referência e oito evidências visuais locais comprovam escala, portal e scripts;
- inventário final de integridade cobre o manifesto regenerado de arquivos verificados por SHA-256;
- dez capturas fornecidas pelo usuário preservadas sem edição como referência.

Resultado: **32/32 casos aprovados**. Evidência em `reports/render-tests-v1.5.json` e `reports/screenshots/`.


## Rodadas críticas

Três ataques sucessivos encontraram e levaram à correção de:

1. lacunas de splitter/resize, drag/reorder, bulk actions e object transforms;
2. colisões core/pattern e ambiguidade entre documentado e implementado;
3. clipping, peso/fill e semântica do fallback de ícones;
4. estados incompletos, cards sem semântica nativa e conta do usuário ausente;
5. radio e tabs incompletos para teclado/ARIA;
6. segmented duplicado e inconsistências de contagem;
7. checks ao vivo ausentes para os contratos recém-promovidos.

As sínteses estão em `reports/red-team-round-1-synthesis.md` a `red-team-round-3-synthesis.md`. A revisão dedicada mais recente está em `reports/product-shell-contextual-control-red-team-v1.5.md` e encerrou sem objeção substantiva.

## Limites

A automação não prova beleza, clareza editorial nem reconhecimento real entre produtos. Pilotos ainda precisam testar tarefas, conteúdo, contraste contextual e reconhecimento sem nome ou logo. O pacote não modifica nem comprova a migração do ClickAgents.
