---
fonte: 01-canonicos/seed-ds-roadmap.md
versao_da_fonte: v2.7
secao: s12
titulo: "Método de qualidade da F3 (nasceu das críticas do Rafael no Bloco 1; ampliado no Bloco 2)"
sequencia: 13 de 15
bytes_do_corpo: 1724
md5_do_corpo: 52671a335e86f795ddace743bf6b4a58
gerado_por: 06-validacao/geradores/gen-camada-ia.py
nota: fatia GERADA — o corpo abaixo é byte a byte o trecho do canônico; edite o canônico, nunca esta fatia. Canônico inteiro em https://ds.seed.eng.br/01-canonicos/seed-ds-roadmap.md
---
## Método de qualidade da F3 (nasceu das críticas do Rafael no Bloco 1; ampliado no Bloco 2)

Todo componente com variantes/estados passa pelos **7 testes** (`seed-componentes.md` §1.12): container ≥3:1 medido · escada de MECANISMOS (nunca só tom) · aperto de olhos/grayscale · teste do par · regra do um · teste do estado atual ("teste WebEx") · **teste do polegar** (360px com teclado aberto — entrou no v0.7 com a premissa mobile). E: **token de componente que referencia primitivo declara par light/dark obrigatório** (bug real pego no dark do Bloco 1: ghost estava em 2.7:1). **Ampliado no Bloco 3 (2026-08-04):** as suites da validação executada viram ARTEFATO PERMANENTE em `Design System v2/validacao/` (5 suites DOM + contraste.py — 166 testes; regressão dos próximos blocos é re-execução, não reescrita) · **duas lições permanentes:** a suite valida comportamento, NÃO geometria — a validação visual do Rafael é o gate complementar (bug real: overlays sem posicionamento ancorado passaram na suite); e asserções sobre live regions exigem flush de microtask entre atualizações síncronas (mutations coalescem) · regra de preview: **nenhum botão morto** — todo CTA de demo responde. **Novo no Bloco 2 (2026-08-03): validação executada** — além da validação visual do Rafael, o preview passa por suite automatizada (DOM headless + contraste WCAG em script) antes da promoção a estável; a primeira rodada (63 testes) pegou 5 bugs de implementação que a leitura de spec não pegaria (parser inexistente no slider pareado, `aria-invalid` com valor vazio via `toggleAttribute`, canais de live region fundidos na busca, `role="alert"` ausente no switch e no upload).

