agent-engineering-skills 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/AGENTS.md +249 -0
  2. package/LICENSE +21 -0
  3. package/README.md +113 -0
  4. package/bin/cli.js +223 -0
  5. package/docs/agent-integration.md +200 -0
  6. package/docs/philosophy.md +131 -0
  7. package/docs/reference-authoring.md +117 -0
  8. package/docs/skill-authoring.md +126 -0
  9. package/examples/authorization-bypass.md +191 -0
  10. package/examples/frontend-review.md +244 -0
  11. package/examples/race-condition.md +128 -0
  12. package/examples/xp-reward-loop.md +123 -0
  13. package/package.json +45 -0
  14. package/references/engineering.yaml +88 -0
  15. package/references/frontend.yaml +139 -0
  16. package/references/product.yaml +54 -0
  17. package/references/research.yaml +88 -0
  18. package/references/security.yaml +85 -0
  19. package/references/ux.yaml +37 -0
  20. package/scripts/validate.py +454 -0
  21. package/skills/audit/adversarial-review/SKILL.md +190 -0
  22. package/skills/audit/business-logic-audit/SKILL.md +182 -0
  23. package/skills/audit/edge-case-hunter/SKILL.md +159 -0
  24. package/skills/audit/error-flow-audit/SKILL.md +184 -0
  25. package/skills/audit/state-consistency-audit/SKILL.md +174 -0
  26. package/skills/audit/user-flow-audit/SKILL.md +161 -0
  27. package/skills/frontend/accessibility-review/SKILL.md +186 -0
  28. package/skills/frontend/animation-review/SKILL.md +171 -0
  29. package/skills/frontend/interaction-design/SKILL.md +162 -0
  30. package/skills/frontend/ux-review/SKILL.md +172 -0
  31. package/skills/frontend/visual-quality-review/SKILL.md +160 -0
  32. package/skills/meta/research-router/SKILL.md +184 -0
  33. package/skills/meta/skill-router/SKILL.md +206 -0
  34. package/skills/product/gamification-audit/SKILL.md +213 -0
  35. package/skills/reliability/data-integrity-audit/SKILL.md +187 -0
  36. package/skills/reliability/idempotency-audit/SKILL.md +191 -0
  37. package/skills/reliability/race-condition-hunter/SKILL.md +181 -0
  38. package/skills/research/github-reference-research/SKILL.md +197 -0
  39. package/skills/research/implementation-research/SKILL.md +181 -0
  40. package/skills/research/market-research/SKILL.md +202 -0
  41. package/skills/research/reference-research/SKILL.md +186 -0
  42. package/skills/security/api-abuse-audit/SKILL.md +178 -0
  43. package/skills/security/authorization-audit/SKILL.md +176 -0
  44. package/skills/security/input-trust-audit/SKILL.md +178 -0
  45. package/templates/audit-report.md +89 -0
  46. package/templates/bug-report.md +107 -0
  47. package/templates/design-review.md +122 -0
  48. package/templates/research-report.md +96 -0
@@ -0,0 +1,171 @@
1
+ ---
2
+ name: animation-review
3
+ description: Evaluates purpose, timing, easing, hierarchy, continuity, interruption, accessibility, and reduced motion compliance of every animation in the interface.
4
+ category: frontend
5
+ triggers:
6
+ - "audit animations"
7
+ - "review motion and transitions"
8
+ - "check timing and easing"
9
+ - "verify reduced motion"
10
+ - "animation hierarchy and interruption"
11
+ priority: high
12
+ ---
13
+
14
+ # Animation Review
15
+
16
+ ## Objective
17
+
18
+ Ensinar o agente a avaliar animações contra princípios de motion design: propósito,
19
+ timing, easing, hierarquia, continuidade, interrupção, acessibilidade, e reduced
20
+ motion. Toda animação deve ter uma razão de existir; se não serve à função, é ruído.
21
+
22
+ ## When to Use
23
+
24
+ * Em qualquer interface com animações, transições, micro-interações, parallax,
25
+ loaders, ou motion.
26
+ * Quando o pedido menciona "animation", "motion", "transitions", "easing", "timing",
27
+ "reduced motion", "parallax".
28
+ * **Composição:** roda com `interaction-design` (transições e feedback de estado),
29
+ `accessibility-review` (reduced motion, vestibular), e `ux-review` (animação que
30
+ informa vs distrai). Consulta `references/frontend.yaml` (Animate UI, Impeccable,
31
+ Interfaces).
32
+
33
+ ## Mental Model
34
+
35
+ Animação não é decoração — é **comunicação**. Toda animação deve responder a uma
36
+ pergunta do usuário (o que aconteceu? para onde vai? o que mudou?). Se não responde,
37
+ é ruído visual.
38
+
39
+ Os eixos (do `plan.md` §10):
40
+
41
+ ```text
42
+ purpose — a animação comunica algo? (mudança de estado, navegação, feedback)
43
+ timing — duração correta para o que comunica (muito rápida = imperceptível;
44
+ muito lenta = frustrante)
45
+ easing — a curva de aceleração é natural? (ease-out para entrada, ease-in
46
+ para saída, spring para interação)
47
+ hierarchy — animações mais importantes são mais rápidas/notáveis que as menos
48
+ importantes
49
+ continuity — elementos não teleportam; o movimento é contínuo entre estados
50
+ interruption — a animação pode ser interrompida? (se o usuário clica de novo, o
51
+ que acontece?)
52
+ accessibility — a animação respeita `prefers-reduced-motion`?
53
+ reduced motion — cores e transições não causam desconforto visual (vestibular,
54
+ epilepsy)
55
+ ```
56
+
57
+ ## Investigation Procedure
58
+
59
+ 1. **Inventariar animações** — carregamento, transição de página, hover, expansão,
60
+ entrada/saída, loader, parallax, scroll-triggered.
61
+ 2. **Para cada, avaliar propósito** — comunica uma mudança de estado, direção, hierarquia?
62
+ Ou é decorativa sem função? ("animation for its own sake")
63
+ 3. **Avaliar timing** — durações consistentes? (50-100ms para feedback, 200-300ms para
64
+ transição de página, > 500ms só para storytelling). Todas as animações similares
65
+ têm a mesma duração?
66
+ 4. **Avaliar easing** — a curva de aceleração é natural? (ease-out para entrada de
67
+ objetos, ease-in para saída, spring para interação tátil). Ou é linear (robótica)?
68
+ 5. **Avaliar hierarchy** — a animação principal é mais rápida que as secundárias? Ou
69
+ tudo anima junto no mesmo tempo?
70
+ 6. **Avaliar continuity** — elementos teleportam entre estados? (não: movimento
71
+ contínuo é esperado). Exemplo: modal abre sem transição, item some sem fade.
72
+ 7. **Avaliar interruption** — se o usuário clica de novo, a animação reinicia ou
73
+ inverte suavemente? Ou trava/empilha?
74
+ 8. **Avaliar reduced motion** — `@media (prefers-reduced-motion: reduce)` é respeitado?
75
+ Animações sensíveis (parallax, scroll, flutuação) são desligadas? Há botão de
76
+ desligar motion no app?
77
+ 9. **Avaliar desconforto** — parallax acentuado, flutuação constante, scroll-triggered
78
+ que compete com scroll, loading animation que vibra. Causa desconforto vestibular?
79
+ 10. **Sintetizar** — referenciar `references/frontend.yaml` (Animate UI, Impeccable)
80
+ quando apropriado.
81
+
82
+ ## Questions to Ask
83
+
84
+ * Esta animação tem propósito? (comunica algo, ou só "enfeita"?)
85
+ * Duração é apropriada? (feedback rápido, transição suave, storytelling lento?)
86
+ * Easing é natural (ease-out/spring) ou linear (robótica)?
87
+ * Animações similares têm a mesma duração e easing? (consistência)
88
+ * A animação mais importante é mais rápida que as secundárias? (hierarchy)
89
+ * Elementos teleportam ou se movem continuamente? (continuity)
90
+ * Se o usuário clica de novo, a animação interrompe suavemente? (interruption)
91
+ * `prefers-reduced-motion` é respeitado? (accessibility)
92
+ * Alguma animação causa desconforto visual? (parallax/scroll não-controlado)
93
+
94
+ ## Attack Patterns
95
+
96
+ ```text
97
+ purpose absent
98
+ entrada de sidebar com fade+slide quando o conteúdo não mudou → por quê?
99
+ (animação decorativa sem função comunicativa)
100
+
101
+ timing wrong
102
+ hover de botão: 300ms (muito longo para feedback que deve ser < 100ms)
103
+ transição de página: 100ms (muito rápido, não comunica navegação)
104
+ loader: 10s (nunca deve; se > 10s, erro)
105
+
106
+ easing linear
107
+ todas as animações usam `ease` ou `linear`
108
+ → movimento robótico, sem naturalidade; falta spring/ease-out
109
+
110
+ hierarchy inverted
111
+ micro-interação de ícone (secundária) anima 300ms
112
+ transição de página (principal) anima 100ms
113
+ → hierarquia invertida; o principal parece menos importante
114
+
115
+ continuity broken
116
+ modal aparece sem transição (teleport)
117
+ item some antes de sair da tela (corte abrupto)
118
+ → desorientação, perda de contexto
119
+
120
+ interruption broken
121
+ clique em botão → animação de 300ms
122
+ clique de novo no meio → animação reinicia do início (trava) ou empilha (2×)
123
+ → deveria interromper e inverter suavemente
124
+
125
+ reduced motion ignored
126
+ parallax no hero com `prefers-reduced-motion: reduce`
127
+ → ainda anima, causa desconforto vestibular
128
+
129
+ vestibular risk
130
+ paralaxe acentuado em background de scroll-triggered
131
+ flutuação constante de CTA (sobe e desce para sempre)
132
+ loading spinner com rotação rápida + contraste alto
133
+ ```
134
+
135
+ ## Evidence Requirements
136
+
137
+ * **Nomear a animação e o eixo** (propósito/timing/easing/hierarchy/continuity/
138
+ interruption/accessibility/reduced motion).
139
+ * **Mostrar os valores exatos** (timing em ms, easing function, CSS/JS da animação).
140
+ * **Escalar confiança (Animation Review):**
141
+ * `CONFIRMED` — animação sem propósito, timing errado, easing linear, hierarchy
142
+ invertida, continuity quebrada, reduced motion não respeitado.
143
+ * `HIGH CONFIDENCE` — violação clara de princípio.
144
+ * `POSSIBLE` — questão de nuance (timing marginalmente longo).
145
+ * `SPECULATIVE` — preferência pessoal.
146
+
147
+ ## False Positives
148
+
149
+ * **Animação de marca com propósito** — animações de marca (logo, loading) podem ser
150
+ mais longas e expressivas por design. Avaliar se servem à identidade ou são ruído.
151
+ * **Timing varia por plataforma** — mobile vs desktop podem ter durações diferentes.
152
+ Não reportar "inconsistência" entre plataformas sem considerar o contexto.
153
+ * **Reduced motion parcial** — se o app respeita reduced motion para as animações
154
+ principais, omitir de micro-interações pode ser aceitável. Marcar como melhoria.
155
+ * **Parallax com fallback** — se parallax desliga em reduced motion, é aceitável.
156
+ Confirmar o fallback.
157
+ * **Easing linear intencional** — progress bar, skeleton, ou loader podem ser lineares
158
+ intencionalmente. Não reportar como erro.
159
+
160
+ ## Output Format
161
+
162
+ Para cada animação que viola um princípio, um finding via `templates/audit-report.md`.
163
+ Em **Affected component**, nomeie a animação. Em **Reproduction**, descreva o que o
164
+ usuário vê vs o esperado (timing, easing, continuity, etc.). Em **Root cause**, aponte
165
+ o eixo violado. Em **Recommendation**, dê a correção (timing, easing, respectar
166
+ reduced motion, adicionar continuity, interrompção suave, remover animação sem
167
+ propósito).
168
+
169
+ Apresente por eixo. Reduced motion e vestibular (acessibilidade/desconforto) primeiro;
170
+ purpose e continuity depois; timing/easing/hierarchy em seguida; interruption por
171
+ último.
@@ -0,0 +1,162 @@
1
+ ---
2
+ name: interaction-design
3
+ description: Evaluates hover, focus, pressed, disabled, loading, transitions, feedback, and micro-interactions to verify every state of every interactive element is intentionally designed.
4
+ category: frontend
5
+ triggers:
6
+ - "audit interaction design"
7
+ - "check hover focus pressed disabled states"
8
+ - "review micro-interactions"
9
+ - "loading and transition feedback"
10
+ - "every interactive state designed"
11
+ priority: high
12
+ ---
13
+
14
+ # Interaction Design
15
+
16
+ ## Objective
17
+
18
+ Ensinar o agente a avaliar **cada estado de cada elemento interativo**: hover, focus,
19
+ pressed, disabled, loading, transitions, feedback, e micro-interações. A pergunta
20
+ central: *todo estado que o usuário pode ver está intencionalmente desenhado, ou há
21
+ estados acidentais (sem feedback, sem affordance, sem contraste)?*
22
+
23
+ ## When to Use
24
+
25
+ * Em qualquer tela com elementos interativos (botões, links, inputs, dropdowns, cards
26
+ clicáveis, toggles).
27
+ * Quando o pedido menciona "interaction", "micro-interactions", "hover state",
28
+ "focus state", "disabled state", "loading state".
29
+ * Em revisões de frontend onde UX e visual são complementares à interação.
30
+ * **Composição:** roda com `ux-review` (a interação serve à UX), `visual-quality-review`
31
+ (estados são visuais), `animation-review` (transições/motion são interação), e
32
+ `accessibility-review` (focus/keyboard são acessibilidade E interação).
33
+
34
+ ## Mental Model
35
+
36
+ Todo elemento interativo é uma **máquina de estados**: default, hover, focus, pressed,
37
+ disabled, loading, selected, error. O bug de interação é um **estado não-desenhado** —
38
+ o usuário paira, foca, pressiona, desabilita, e nada comunica a mudança. O sistema
39
+ "funciona" mas não *reage*.
40
+
41
+ O modelo de estados canônicos (do `plan.md` §10):
42
+
43
+ ```text
44
+ hover — indica que o elemento é interativo (mudança de fundo/borda/elevação)
45
+ focus — indica posição de teclado/assistivo (ring, outline, não removido!)
46
+ pressed — confirma o pressionamento (escala, escurece, "estou sendo clicado")
47
+ disabled — comunica indisponibilidade com causa (não só "cinza morto")
48
+ loading — comunica trabalho em progresso (não congelar sem feedback)
49
+ transitions — mudanças de estado são suaves e legíveis, não teleportadas
50
+ feedback — resultado da interação é comunicado (não só no DOM)
51
+ micro-interactions — detalhe que encanta e informa (efeito sutil e significativo)
52
+ ```
53
+
54
+ ## Investigation Procedure
55
+
56
+ 1. **Listar elementos interativos** — botões, links, inputs, selects, toggles, cards,
57
+ tabs, dropdowns, modais, checkboxes.
58
+ 2. **Para cada elemento, percorrer os estados:**
59
+ * **default** — comunica a função? (affordance)
60
+ * **hover** — muda algo? O que? É distinto o suficiente?
61
+ * **focus** — há focus ring/outline? Foi removido (culpado — acessibilidade)?
62
+ * **pressed** — dá feedback de pressionamento? Ou fica estático?
63
+ * **disabled** — comunica por quê? Ou é indistinguível de erro?
64
+ * **loading** — durante a ação, o elemento mostra progresso? (spinner/skeleton/
65
+ mudança de label) ou congela?
66
+ * **selected/active** — o estado selecionado é visível e distinto?
67
+ * **error** — a interação que falha comunica o erro?
68
+ 3. **Avaliar transitions** — mudanças de estado são suaves? (ou teleportam?) São
69
+ rápidas demais para perceber ou lentas demais para tolerar?
70
+ 4. **Avaliar micro-interactions** — há detalhe que informa (ex: input com check de
71
+ validação, botão com confirmação)? Algum é *excessivo* (ruído)?
72
+ 5. **Verificar focus sequence** — interagir só com teclado funciona? (parcialmente
73
+ aqui, completo em `accessibility-review`).
74
+ 6. **Sintetizar** com o formato de saída.
75
+
76
+ ## Questions to Ask
77
+
78
+ * Cada elemento interativo comunica sua função no default? (affordance)
79
+ * O hover muda o estado de forma perceptível? (fundo/borda/elevação)
80
+ * O focus tem ring/outline visível? Foi removido com `outline: none`?
81
+ * O pressed dá feedback de pressionamento? (escala/escurece)
82
+ * O disabled comunica a causa ("unavailable — upgrade to pro") ou é um cinza mudo?
83
+ * Durante uma ação, o elemento mostra loading? Ou congela até o fim?
84
+ * O estado selecionado (active/tab/selected) é visível e distinto?
85
+ * Transições são suaves? (ou teleportam entre estados?)
86
+ * Micro-interações informam ou só enfeitam? (alguma é excessiva/ruído?)
87
+ * A interação com teclado completa o fluxo? (focus sequence funciona?)
88
+
89
+ ## Attack Patterns
90
+
91
+ ```text
92
+ hover without affordance change
93
+ botão muda cor no hover, mas links/ícones não — o que é clicável é inconsistente
94
+
95
+ focus removed
96
+ `:focus { outline: none }` sem substituto
97
+ → teclado/assistivo não sabe onde está. Acessibilidade E interação quebrada.
98
+
99
+ pressed feedback absent
100
+ botão não reage ao clique (sem escala, sem mudança)
101
+ → usuário não sabe se o clique foi registrado
102
+
103
+ disabled without cause
104
+ botão cinza sem tooltip/legenda de "por quê"
105
+ → usuário pensa que está bugado (ver também `error-flow-audit`)
106
+
107
+ loading frozen
108
+ ação disparada, botão congela 3s sem feedback
109
+ → usuário clica de novo (duplo submit), ou acha que quebrou
110
+
111
+ selected state invisible
112
+ tab selecionada e não-selecionada têm o mesmo peso visual
113
+ → usuário não sabe em que página está
114
+
115
+ transition too fast/slow
116
+ 0ms (teleport) → desorientado
117
+ 800ms em card grid → frustrante, lento
118
+
119
+ micro-interaction excessive
120
+ animação em cada hover de ícone de 24px → ruído visual, distração
121
+ (ver `animation-review`)
122
+
123
+ feedback after action absent
124
+ toggle flip sem "salvo" (o toggle é otimistic e o servidor falhou — ver
125
+ `state-consistency-audit` — ou a mudança não é comunicada)
126
+ ```
127
+
128
+ ## Evidence Requirements
129
+
130
+ * **Nomear o elemento e o estado** (ex: "botão Save: estado disabled sem explicação").
131
+ * **Mostrar o estado observado** vs o estado esperado (sem focus ring, sem feedback de
132
+ pressed, congelado em loading).
133
+ * **Escalar confiança (Interaction Design):**
134
+ * `CONFIRMED` — estado não-desenhado observado (ex: `outline: none` sem substituto,
135
+ botão congela sem loading).
136
+ * `HIGH CONFIDENCE` — código/estilo confirma a ausência de estado.
137
+ * `POSSIBLE` — interação marginalmente inconsistente.
138
+ * `SPECULATIVE` — preferência pessoal sobre micro-interação.
139
+
140
+ ## False Positives
141
+
142
+ * **Plataforma usa padrão diferente** — hover em touch não existe; em desktop touch
143
+ não aplica. Avaliar por plataforma/dispositivo.
144
+ * **Micro-interação é parte da marca** — animações de marca podem ser mais presentes;
145
+ avaliar se servem a identidade ou são ruído.
146
+ * **Focus via outro sinal** — focus ring removido mas substituído por outra indicação
147
+ visível (border, background) em todos os estados. Confirmar antes de reportar.
148
+ * **Disabled com tooltip intencional** — se o disabled tem tooltip/legend explicando
149
+ causa, não é "cinza mudo". Confirmar.
150
+ * **Loading indireto** — skeleton no lugar do conteúdo é loading válido. Não exigir
151
+ spinner no botão se o skeleton comunica.
152
+
153
+ ## Output Format
154
+
155
+ Para cada estado não-desenhado, um finding via `templates/audit-report.md`. Em
156
+ **Affected component**, nomeie o elemento e o estado. Em **Reproduction**, descreva o
157
+ que o usuário vê vs o que deveria ver (paira/foca/pressiona e nada muda). Em **Root
158
+ cause**, aponte o estado ausente. Em **Recommendation**, dê a correção (adicionar focus
159
+ ring, feedback de pressed, disabled com causa, loading state, selected state).
160
+
161
+ Apresente por elemento × estado. Focus e feedback (impacto direto em uso) primeiro;
162
+ hover/pressed/disabled depois; transitions e micro-interactions por último.
@@ -0,0 +1,172 @@
1
+ ---
2
+ name: ux-review
3
+ description: Evaluates clarity, hierarchy, cognitive load, feedback, affordances, consistency, navigation, empty states, errors, loading, and progress indicators in a user interface against established UX principles.
4
+ category: frontend
5
+ triggers:
6
+ - "review ux"
7
+ - "audit usability"
8
+ - "evaluate clarity and cognitive load"
9
+ - "check empty states and errors"
10
+ - "review navigation and feedback"
11
+ priority: high
12
+ ---
13
+
14
+ # UX Review
15
+
16
+ ## Objective
17
+
18
+ Ensinar o agente a avaliar a experiência do usuário de uma interface contra princípios
19
+ estabelecidos: clareza, hierarquia, carga cognitiva, feedback, affordances,
20
+ consistência, navegação, estados vazios, erros, e loading.
21
+
22
+ ## When to Use
23
+
24
+ * Antes de lançar ou revisar uma tela/fluxo que o usuário vê.
25
+ * Quando o pedido menciona "UX", "usability", "user experience", "confusing",
26
+ "unclear", "clarity", "feedback".
27
+ * Em qualquer revisão de frontend que não seja puramente visual (ver
28
+ `visual-quality-review` para o visual).
29
+ * **Composição:** roda com todas as frontend skills (especialmente `visual-quality-review` e `interaction-design`). Pareia também com `user-flow-audit` (fluxos) e
30
+ `reference-research` (referências de UX de `references/ux.yaml`).
31
+
32
+ ## Mental Model
33
+
34
+ UX não é sobre beleza — é sobre **reduzir a distância entre a intenção do usuário e o
35
+ efeito no sistema**. Toda ambiguidade, pausa, ou descoberta é atrito.
36
+
37
+ Seis princípios base:
38
+
39
+ 1. **Clareza** — o usuário entende o que está vendo, o que pode fazer, e o que cada
40
+ ação faz.
41
+ 2. **Hierarquia** — o layout comunica importância relativa: mais importante = maior,
42
+ mais perto do topo, mais contraste.
43
+ 3. **Carga cognitiva** — quanta informação o usuário precisa reter para agir. Quanto
44
+ menos, melhor.
45
+ 4. **Feedback** — toda ação deve ter resposta visível em < 100ms (imediata) ou
46
+ indicador de progresso (se > 1s). O estado do sistema é sempre visível.
47
+ 5. **Affordances** — elementos comunicam sua função. Botões parecem clicáveis, inputs
48
+ parecem editáveis, items não-clicáveis não parecem botões.
49
+ 6. **Consistência** — o mesmo padrão visual/comportamental resolve o mesmo problema em
50
+ toda a interface. Modais não variam; botões primários não alternam cor.
51
+
52
+ ## Investigation Procedure
53
+
54
+ 1. **Capturar / revisar a tela** — lista de componentes, fluxo, estados.
55
+ 2. **Avaliar clareza** — o título/heading explica o que é esta página? A ação primária
56
+ é óbvia? Labels são descritivas?
57
+ 3. **Avaliar hierarquia** — o elemento mais importante é o mais proeminente? Há
58
+ hierarquia visual (tamanho, peso, cor, espaçamento) ou é tudo igual?
59
+ 4. **Avaliar carga cognitiva** — quantos elementos o usuário precisa processar antes
60
+ de agir? Há informação redundante? Há campos desnecessários?
61
+ 5. **Avaliar feedback** — ações têm resposta imediata? Loading states existem? O
62
+ sistema mostra o estado atual após cada ação? Erros são comunicados perto do campo?
63
+ 6. **Avaliar affordances** — botões parecem clicáveis? Links parecem links?
64
+ Inputs parecem editáveis? Texto pleno parece clicável? (se sim, affordance falsa)
65
+ 7. **Avaliar consistência** — o mesmo tipo de ação usa o mesmo componente em toda a
66
+ interface? (todos os "salvar" são iguais? todos os "cancelar" são iguais?)
67
+ 8. **Avaliar navegação** — o usuário sabe onde está? Sabe como voltar? Sabe onde
68
+ encontrar ações importantes? Há breadcrumbs/back consistentes?
69
+ 9. **Avaliar estados vazios** — o que aparece quando não há dados? Guia, instrução, ou
70
+ espaço vazio? (empty state deve ser útil, não confuso)
71
+ 10. **Avaliar erros e loading** — erros são legíveis e acionáveis? Loading é visível e
72
+ não bloqueia para sempre? (ver `error-flow-audit` para erros server-side)
73
+ 11. **Sintetizar** com o formato de saída, referenciando `references/ux.yaml` quando
74
+ apropriado.
75
+
76
+ ## Questions to Ask
77
+
78
+ * O usuário entende o que esta página/tela faz sem ler um tutorial?
79
+ * Qual é a ação primária? Ela é a mais proeminente visualmente?
80
+ * Quantos elementos competem pela atenção do usuário ao mesmo tempo?
81
+ * Toda ação dá feedback imediato? (visual, não só console.log)
82
+ * O estado do sistema (salvo, carregando, erro) é visível sem o usuário precisar
83
+ adivinhar?
84
+ * Botões parecem clicáveis? Inputs parecem editáveis? Texto pleno parece link?
85
+ * O mesmo padrão repete para o mesmo problema? (botões, modais, notificações, menus)
86
+ * O usuário sabe onde está e como voltar? (navegação, breadcrumbs, back)
87
+ * O que aparece quando não há dados? (empty state: útil ou vazio?)
88
+ * Erros são legíveis ("Campo obrigatório" vs "Error 500 — contact support")?
89
+ * Loading é visível e não bloqueia para sempre? (skeleton, spinner, ou tela branca?)
90
+
91
+ ## Attack Patterns
92
+
93
+ ```text
94
+ clarity failure
95
+ título "Dashboard" → dashboard de quê? de quem? sem contexto
96
+ botão "Submit" → submit o quê? para onde? o que acontece depois?
97
+
98
+ hierarchy flattened
99
+ ação primária (salvar) e secundária (cancelar) têm o mesmo peso visual
100
+ → usuário hesita, erra, ou ignora a primária
101
+
102
+ cognitive overload
103
+ form com 20 campos, 3 seções, 2 tipos de validação
104
+ → taxa de abandono alta, erros frequentes
105
+
106
+ feedback absent
107
+ "Save" → sem loading, sem confirmação, sem erro
108
+ → usuário clica de novo (duplo submit) ou não sabe se salvou
109
+
110
+ affordance false
111
+ card de perfil clicável leva ao perfil (não parece clicável)
112
+ → usuário não descobre que pode editar clicando
113
+
114
+ consistency broken
115
+ modal de confirmação: "Save" verde / "Cancel" cinza
116
+ mesma ação em outra tela: "Save" azul / "Cancel" vermelho
117
+ → confiança no padrão quebrada
118
+
119
+ navigation lost
120
+ sem breadcrumbs, sem back button consistente, sem título de página
121
+ → usuário não sabe onde está após 3 cliques
122
+
123
+ empty state useless
124
+ empty: "No data" — e agora? O que o usuário deve fazer?
125
+ (correto: "No posts yet. Create your first post!" com link)
126
+
127
+ error not actionable
128
+ "Something went wrong" — qual problema? o que o usuário faz?
129
+ (correto: "Connection lost. Check your internet and retry.")
130
+ ```
131
+
132
+ ## Evidence Requirements
133
+
134
+ * **Nomear o princípio violado** (clareza/hierarquia/carga cognitiva/feedback/
135
+ affordance/consistência/navegação/empty state/error).
136
+ * **Mostrar o elemento exato** e o porquê da violação (ex: "Dois botões primários",
137
+ "Título vago", "Estado vazio sem ação").
138
+ * **Referenciar a fonte de UX** (Laws of UX, Interfaces, etc.) como suporte quando
139
+ relevante — mas não é evidência, é fundamentação.
140
+ * **Escalar confiança (UX Review):**
141
+ * `CONFIRMED` — padrão observado, princípio violado, e o impacto é demonstrável
142
+ (ex: usuário hesita, clica errado, abandona).
143
+ * `HIGH CONFIDENCE` — padrão observado, princípio violado, impacto plausível.
144
+ * `POSSIBLE` — violação marginal ou subjetiva.
145
+ * `SPECULATIVE` — preferência pessoal sem fundamento em princípio.
146
+
147
+ ## False Positives
148
+
149
+ * **Padrão de plataforma** — iOS HIG e Material Design diferem; um padrão "diferente" é
150
+ correto se consistente com a plataforma.
151
+ * **Público específico** — alta densidade de informação pode ser intencional para
152
+ power users. Avaliar pelo público-alvo.
153
+ * **Empty state com propósito** — "sem dados" pode ser deliberado (ex: não há
154
+ conteúdo e o estado não pede ação). Verificar intenção.
155
+ * **Feedback não-visual intencional** — haptic/audio feedback pode substituir visual.
156
+ Não reportar se o feedback existe em outra modalidade.
157
+ * **Consistência com design system** — se o design system define o padrão, a variação
158
+ está errada. Verificar contra o design system antes de reportar.
159
+ * **Preferência pessoal** — "eu não gosto" não é finding de UX. Toda crítica deve ser
160
+ fundamentada em princípio, não em gosto.
161
+
162
+ ## Output Format
163
+
164
+ Para cada violação de princípio, um finding via `templates/audit-report.md`. Em
165
+ **Affected component**, nomeie o componente/tela. Em **Reproduction**, descreva o que
166
+ o usuário vê e o que deveria ver. Em **Root cause**, aponte o princípio violado. Em
167
+ **Recommendation**, dê a correção concreta de UX (título, realce da ação primária,
168
+ empty state guiado, feedback adicionado, affordance corrigida, consistência de padrão).
169
+
170
+ Apresente por princípio violado. Impacto em fluxo (navegação perdida, erro não
171
+ acionável) primeiro; clareza e hierarquia depois; affordance/consistência/empty state
172
+ em seguida.
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: visual-quality-review
3
+ description: Evaluates typography, spacing, hierarchy, density, contrast, composition, consistency, visual noise, and generic AI slop patterns against a high craft bar.
4
+ category: frontend
5
+ triggers:
6
+ - "audit visual quality"
7
+ - "review typography spacing hierarchy"
8
+ - "check contrast and density"
9
+ - "detect AI slop"
10
+ - "evaluate visual craft"
11
+ priority: high
12
+ ---
13
+
14
+ # Visual Quality Review
15
+
16
+ ## Objective
17
+
18
+ Ensinar o agente a avaliar a **qualidade de execução visual** de uma interface contra
19
+ um bar padrão de craft: tipografia, spacing, hierarquia, densidade, contraste,
20
+ composição, consistência, ruído visual, e padrões genéricos de AI slop.
21
+
22
+ ## When to Use
23
+
24
+ * Em qualquer revisão de frontend que não seja só de UX ou interação.
25
+ * Quando uma interface parece "genérica", "feia", "amadora", ou "feita por IA".
26
+ * Quando o pedido menciona "visual quality", "craft", "polish", "typography",
27
+ "spacing", "hierarchy", "AI slop", "generic", "boring".
28
+ * **Composição:** roda com `ux-review` (UX + visual são complementares) e
29
+ `interaction-design` (visual + interação = experiência completa). Consulta
30
+ `references/frontend.yaml` (Impeccable, Impeccable Slop, Dribbble, Interfaces).
31
+
32
+ ## Mental Model
33
+
34
+ Qualidade visual não é subjetiva — é uma execução de princípios de design. Os eixos
35
+ são mensuráveis:
36
+
37
+ | Eixo | O que avaliar |
38
+ |---|---|
39
+ | **Tipografia** | hierarchy consistente, escala, line-height, legibilidade, contraste de fonte |
40
+ | **Spacing** | sistema de ritmo, padding interno vs externo, alinhamento vertical/horizontal |
41
+ | **Hierarchy** | peso visual que comunica importância relativa, não só tamanho |
42
+ | **Density** | informação compactada ou espaçada demais? |
43
+ | **Contrast** | texto vs fundo, componentes vs background, modo escuro/claro |
44
+ | **Composition** | balance, grid, alinhamento, margens, corners |
45
+ | **Consistency** | o mesmo padrão visual resolve o mesmo problema em toda a interface |
46
+ | **Visual noise** | elementos decorativos sem função, bordas desnecessárias, cores demais |
47
+ | **AI slop** | padrões genéricos que indicam output de IA sem revisão |
48
+
49
+ ## Investigation Procedure
50
+
51
+ 1. **Avaliar tipografia** — há escala consistente? (h1 > h2 > h3 > body > caption)
52
+ O line-height é legível? O contraste de fonte é suficiente? A fonte é apropriada
53
+ para o contexto?
54
+ 2. **Avaliar spacing** — há um sistema de ritmo (4px nem sempre, mas consistente)?
55
+ Elementos relacionados estão próximos? Elementos diferentes estão separados?
56
+ 3. **Avaliar hierarchy** — a ação primária é a mais proeminente? Informações de mesmo
57
+ nível têm o mesmo peso visual? A hierarquia é comunicada por mais de um sinal
58
+ (tamanho + peso + cor + espaçamento)?
59
+ 4. **Avaliar density** — o conteúdo é denso demais? (exaustivo) ou esparso demais?
60
+ (precisa scroll infinito para ver nada)
61
+ 5. **Avaliar contrast** — texto body tem ≥ 4.5:1? O contraste de componentes é
62
+ suficiente? Modo escuro recalculou cores ou só inverteu?
63
+ 6. **Avaliar composition** — grid consistente? Alinhamento vertical/horizontal correto?
64
+ Margens e paddings consistentes? Corners uniformes?
65
+ 7. **Avaliar visual noise** — há elementos decorativos que não servem à função
66
+ (bordas, ícones, cores, gradientes, sombras)? Há informações redundantes?
67
+ 8. **Avaliar AI slop** — padrões genéricos: ícones Lucide sem personalidade, ondas
68
+ SVG repetitivas, "Build Something Amazing", "Empower Your Team", roxo-azul
69
+ gradiente, cartões sem conteúdo real, avatares genéricos.
70
+ 9. **Sintetizar** — referenciar `references/frontend.yaml` (Impeccable, Impeccable
71
+ Slop, Interfaces) quando apropriado.
72
+
73
+ ## Questions to Ask
74
+
75
+ * A tipografia tem escala consistente? A fonte é legível no tamanho usado?
76
+ * O spacing é consistente ou parece aleatório? (padding varia sem motivo)
77
+ * A hierarquia visual comunica o que é importante? (ou tudo parece igual)
78
+ * A densidade é apropriada para o conteúdo? (informação compactada vs perdida)
79
+ * O contraste de texto é suficiente (≥ 4.5:1)? O modo escuro recalcula ou é acidental?
80
+ * O grid é consistente? Alinhamentos estão corretos?
81
+ * Há elementos decorativos sem função? (visual noise)
82
+ * A interface parece "genérica"? (mesmo gradiente, mesmo ícone, mesmo "Build
83
+ Something" — AI slop)
84
+
85
+ ## Attack Patterns
86
+
87
+ ```text
88
+ typography broken
89
+ h1 = 32px, h2 = 28px, h3 = 18px (escala inconsistente — gap de 2px vs 10px)
90
+ body = 14px com line-height 1.2 (ilegível)
91
+ fonte display para body text (cansativa)
92
+
93
+ spacing random
94
+ padding: 24px em um card, 16px em outro (mesmo tipo)
95
+ elementos relacionados com 40px de gap; unrelated com 8px
96
+
97
+ hierarchy flat
98
+ preço (importante) e "em até 3x sem juros" (secundário) têm mesmo size/weight
99
+ → usuário não sabe o que é o valor principal
100
+
101
+ density wrong
102
+ form com 3 campos + 2 botões ocupando 100% da viewport (esparso demais)
103
+ tabela com 10 colunas sem scroll horizontal (denso demais)
104
+
105
+ contrast insufficient
106
+ gray-400 (#9CA3AF) em gray-50 (#F9FAFB) — 1.8:1, invisível
107
+ placeholder cinza claro em fundo branco
108
+
109
+ composition broken
110
+ margem esquerda 24px, direita 16px (não centrado)
111
+ grid com gutter inconsistente
112
+
113
+ AI slop detected
114
+ "Build Something Amazing" como headline
115
+ gradiente azul-roxo padrão
116
+ ondas SVG decorativas sem sentido
117
+ avatares de usuário genéricos (UI Avatars sem personalização)
118
+ "Lorem ipsum" em produção
119
+ tooltip genérico "This is a tooltip"
120
+ "Empower Your Workflow" como subheading
121
+ ```
122
+
123
+ ## Evidence Requirements
124
+
125
+ * **Nomear o eixo** (tipografia/spacing/hierarchy/density/contrast/composition/
126
+ noise/slop).
127
+ * **Mostrar o elemento exato** e a violação do princípio (ex: "h1=32px, h2=28px no
128
+ header, mas h2=20px no card — inconsistência de escala").
129
+ * **Referenciar o padrão esperado** (escala, sistema de spacing, grid, WCAG contrast).
130
+ * **Escalar confiança (Visual Quality):**
131
+ * `CONFIRMED` — violação mensurável (ex: contraste 2.1:1, escala inconsistente, grid
132
+ quebrado, AI slop identificável).
133
+ * `HIGH CONFIDENCE` — violação clara de princípio.
134
+ * `POSSIBLE` — subjetivo, pode ser questão de gosto.
135
+ * `SPECULATIVE` — preferência pessoal não fundamentada.
136
+
137
+ ## False Positives
138
+
139
+ * **Design system define o padrão** — se o design system tem uma escala de tipografia
140
+ e a interface segue, "inconsistência" é entre a interface e o sistema, não um erro
141
+ da interface. Reportar como desvio do design system, não como erro visual.
142
+ * **Modo escuro é propositalmente diferente** — algumas cores são intencionalmente
143
+ diferentes no modo escuro (não-simples inversão). Verificar decisão de design.
144
+ * **AI slop é intencional e não há budget para refinar** — reportar como nota, não
145
+ como defeito. Marcar `POSSIBLE` e contextualizar.
146
+ * **Density é intencional** — landing pages são esparsas por design; dashboards são
147
+ densas por design. Avaliar contra o propósito da tela, não contra um padrão absoluto.
148
+ * **Visual noise tem função** — decoração que comunica identidade de marca não é noise.
149
+ Avaliar se serve a marca ou é só poluição.
150
+
151
+ ## Output Format
152
+
153
+ Para cada violação, um finding via `templates/audit-report.md`. Em **Affected
154
+ component**, nomeie o componente/tela. Em **Reproduction**, mostre o elemento e a
155
+ violação (incluindo valor de contraste, tamanhos, gap). Em **Root cause**, aponte o
156
+ eixo. Em **Recommendation**, dê a correção concreta (escala de fonte, sistema de
157
+ spacing, cor de contraste, remoção de AI slop, grid consistente).
158
+
159
+ Apresente por eixo. Contrast e typography (impacto direto em legibilidade) primeiro;
160
+ spacing e hierarchy depois; composition e noise/slop em seguida.