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.
- package/AGENTS.md +249 -0
- package/LICENSE +21 -0
- package/README.md +113 -0
- package/bin/cli.js +223 -0
- package/docs/agent-integration.md +200 -0
- package/docs/philosophy.md +131 -0
- package/docs/reference-authoring.md +117 -0
- package/docs/skill-authoring.md +126 -0
- package/examples/authorization-bypass.md +191 -0
- package/examples/frontend-review.md +244 -0
- package/examples/race-condition.md +128 -0
- package/examples/xp-reward-loop.md +123 -0
- package/package.json +45 -0
- package/references/engineering.yaml +88 -0
- package/references/frontend.yaml +139 -0
- package/references/product.yaml +54 -0
- package/references/research.yaml +88 -0
- package/references/security.yaml +85 -0
- package/references/ux.yaml +37 -0
- package/scripts/validate.py +454 -0
- package/skills/audit/adversarial-review/SKILL.md +190 -0
- package/skills/audit/business-logic-audit/SKILL.md +182 -0
- package/skills/audit/edge-case-hunter/SKILL.md +159 -0
- package/skills/audit/error-flow-audit/SKILL.md +184 -0
- package/skills/audit/state-consistency-audit/SKILL.md +174 -0
- package/skills/audit/user-flow-audit/SKILL.md +161 -0
- package/skills/frontend/accessibility-review/SKILL.md +186 -0
- package/skills/frontend/animation-review/SKILL.md +171 -0
- package/skills/frontend/interaction-design/SKILL.md +162 -0
- package/skills/frontend/ux-review/SKILL.md +172 -0
- package/skills/frontend/visual-quality-review/SKILL.md +160 -0
- package/skills/meta/research-router/SKILL.md +184 -0
- package/skills/meta/skill-router/SKILL.md +206 -0
- package/skills/product/gamification-audit/SKILL.md +213 -0
- package/skills/reliability/data-integrity-audit/SKILL.md +187 -0
- package/skills/reliability/idempotency-audit/SKILL.md +191 -0
- package/skills/reliability/race-condition-hunter/SKILL.md +181 -0
- package/skills/research/github-reference-research/SKILL.md +197 -0
- package/skills/research/implementation-research/SKILL.md +181 -0
- package/skills/research/market-research/SKILL.md +202 -0
- package/skills/research/reference-research/SKILL.md +186 -0
- package/skills/security/api-abuse-audit/SKILL.md +178 -0
- package/skills/security/authorization-audit/SKILL.md +176 -0
- package/skills/security/input-trust-audit/SKILL.md +178 -0
- package/templates/audit-report.md +89 -0
- package/templates/bug-report.md +107 -0
- package/templates/design-review.md +122 -0
- 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.
|