parity run
Compara duas URLs (prod × cand) e produz um relatório de paridade — com seleção de módulos para execuções focadas (SEO, visual, cache, vitals, DOM/CSS).
parity run é o comando principal: ele conduz duas URLs — prod (a fonte da verdade) e cand (o site migrado / preview do PR) — pelos mesmos fluxos e checks, e reporta o que difere.
# Smoke rápido (~30s, sem LLM) — valida que as URLs respondem e renderizam
parity run --prod https://old.com --cand https://new.dev --preset smoke --open
# Auditoria completa com diff visual (precisa de chave de LLM)
parity run --prod https://old.com --cand https://new.dev --preset full --openPresets
| Preset | O que roda |
|---|---|
smoke | Home, só mobile, sem LLM, sem crawl visual/vitals. ~30s — barato o suficiente para disparar depois de todo deploy. |
full | Jornada de compra + busca + interações de carrinho, os dois viewports, vitals-pages 10 / visual-pages 5. Auditoria profunda. |
ci | Jornada de compra, mobile, vitals-pages 5 / visual-pages 3, --only e2e,html,console. Ajustado para CI. |
Suas flags explícitas sempre vencem o preset.
Saída
Uma execução escreve parity-output/runs/<runId>/report.json (a fonte da verdade legível por máquina) e report.html. Campos principais do report.json:
verdict—status(pass/warn/fail),score(0–100), contagens por severidade,modulesRun. O score reflete apenas os módulos que rodaram e sobe conforme as issues são corrigidas.topIssues— priorizadas por LLM, sem duplicatas (5–10 itens); cada uma temseverity,checkesuggestedFix.moduleVerdicts[]— score/status por módulo +pagesAnalyzed.visualDiff— screenshots prod/cand por página, um heatmap do pixelmatch, seções faltando no cand e (com LLM) diffs semânticos.visualDiff.parityOké o sinal binário de "está renderizando certo?".
Use --json runs.jsonl para transmitir uma linha por check conforme ele termina, e parity report <runId> --section <name> --json para extrair uma aba como JSON estruturado — os dois foram feitos para agentes conduzindo o parity em loop.
Execuções focadas
Todo check pertence a exatamente um módulo. Selecione o que roda com --only / --skip; o score reflete só o que rodou. --why imprime o raciocínio da seleção.
| Módulo | Foco | Exemplo |
|---|---|---|
e2e | Jornada de compra, busca, carrinho, login, PDP/PLP | --only e2e |
seo | Meta tags, auditoria profunda de SEO, 404, paginação, status HTTP | --only seo |
visual | Pixel-perfect — regressão visual + heatmap do pixelmatch + diff por LLM Vision | --only visual |
vitals | Web Vitals (LCP/FCP/TTFB/INP/CLS) | --only vitals |
cache | Cobertura de cache / oportunidades de MISS | --only cache |
console | Erros de console + avisos de hidratação | --only console |
html | DOM/CSS de componente — diff estrutural, seções lazy, dimensões de imagem | --only html |
network | Deltas de contagem de requisições / payload | --only network |
# Só SEO
parity run --prod ... --cand ... --only seo
# Tudo menos o visual (pula o custo do LLM Vision)
parity run --prod ... --cand ... --skip visual
# Um check específico, explicando a seleção
parity run --prod ... --cand ... --only check:meta-seo-parity --whyPara o loop pixel-perfect mais profundo numa única seção (screenshots + heatmap + estilos computados + um prompt pronto para LLM), use parity fix / parity section em vez de uma execução completa.
Escolhendo páginas
Por padrão o run amostra um conjunto representativo do sitemap de prod. Force a cobertura exata com --pages "/,/account,/p/known" ou --pages-file targets.txt. Isso delimita as passagens de diff visual / vitals; o crawl dos fluxos roda sempre.
Flags principais
| Flag | Padrão | O que faz |
|---|---|---|
--prod / --cand | obrigatórias | As duas URLs a comparar |
--preset | — | smoke | full | ci |
--only / --skip / --why | — | Seleção de módulo/check (acima) |
--viewports | mobile,desktop | Viewports a testar |
--no-visual-diff | visual ligado | Pula a passagem de diff visual |
--no-cache / --bypass-cache | cache ligado | Ignora / limpa o cache de veredito entre execuções |
--fail-on | critical | Sai com 1 quando uma issue nesta severidade ou acima aparece |
--llm | auto | anthropic | openrouter | claude-code | none | auto |
--json | desligado | Transmite JSONL dos resultados de check |