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,178 @@
1
+ ---
2
+ name: input-trust-audit
3
+ description: Identifies values that should never be trusted from the client (userId, role, price, XP, permissions, ownership, status, reward, timestamps) and verifies the server derives them from the session or database instead of the request payload.
4
+ category: security
5
+ triggers:
6
+ - "audit input trust"
7
+ - "what should not be trusted from the client"
8
+ - "server-side derivation of role price xp"
9
+ - "mass assignment and client-supplied ownership"
10
+ - "never trust the frontend"
11
+ priority: high
12
+ ---
13
+
14
+ # Input Trust Audit
15
+
16
+ ## Objective
17
+
18
+ Ensinar o agente a identificar **quais valores nunca devem ser confiados ao cliente** e
19
+ a verificar que o servidor os deriva da sessão ou do banco, não do payload do request.
20
+ A regra central (também em `AGENTS.md`): não confiar no frontend.
21
+
22
+ ```text
23
+ userId role price XP permissions ownership status reward timestamps
24
+ ```
25
+
26
+ Cada um destes é um valor de *autoridade* — algo que determina identidade, permissão,
27
+ valor, ou ordem. Se o servidor lê do payload, o cliente pode forjar.
28
+
29
+ ## When to Use
30
+
31
+ * Em qualquer endpoint que aceita um body/params com campos sensíveis.
32
+ * Ao auditar mass assignment, client-supplied IDs, preços/XP do cliente, timestamps do
33
+ cliente.
34
+ * Quando o pedido menciona "input trust", "never trust the frontend", "mass
35
+ assignment", "client-supplied role/price/ownerId".
36
+ * **Composição:** pareia com `authorization-audit` (ownership/role do cliente =
37
+ bypass de authz), `api-abuse-audit` (campos extra = mass assignment), `business-logic-audit` (price/XP/reward como regras), `gamification-audit` (XP/reward do
38
+ cliente), `edge-case-hunter` (valores forjados como edge cases).
39
+
40
+ ## Mental Model
41
+
42
+ Todo input do cliente é *não-confiável por default*. A pergunta não é "isto é seguro?"
43
+ mas "o servidor *deriva* este valor ou *aceita* este valor?". Derivar = ler da sessão
44
+ autenticada, do banco, ou calcular server-side. Aceitar = ler do body/params e gravar.
45
+
46
+ A lista canônica de valores de autoridade (do `plan.md` §7):
47
+
48
+ | Valor | Por que não confiar | De onde derivar |
49
+ |---|---|---|
50
+ | `userId` | forjar identidade | sessão/token (`token.sub`) |
51
+ | `role` | escalar privilégio | sessão/DB, nunca body |
52
+ | `price` | zerar/inverter custo | catálogo/DB server-side |
53
+ | `XP` | inflar recompensa | calcular server-side pelo evento |
54
+ | `permissions` | auto-conceder | sessão/DB |
55
+ | `ownership` | reivindicar recurso alheio | DB (recurso.ownerId == caller) |
56
+ | `status` | forçar estado (paid/active) | transição server-side validada |
57
+ | `reward` | auto-recompensar | determinado server-side pelo trigger |
58
+ | `timestamps` | manipular ordem/expiração | `now()` server-side ou DB default |
59
+
60
+ O bug: o handler faz `user.role = body.role` ou `order.price = body.price` ou
61
+ `grant.xp = body.xp`. O cliente envia o que quiser.
62
+
63
+ Variante: **mass assignment** — o servidor binda todo o body ao modelo e grava campos
64
+ que a UI nem envia (`role`, `isAdmin`), porque não há allowlist.
65
+
66
+ ## Investigation Procedure
67
+
68
+ 1. **Listar todos os campos** que cada endpoint relevante aceita no body/params.
69
+ 2. **Rotular cada campo**: não-sensível (nome, bio, preferência) vs **valor de
70
+ autoridade** (qualquer da lista canônica, ou qualquer campo que determine
71
+ identidade/permissão/valor/estado/ordem).
72
+ 3. **Para cada valor de autoridade, perguntar: o servidor deriva ou aceita?**
73
+ * `userId` — vem de `token.sub`/sessão, ou do body?
74
+ * `role` — vem da sessão/DB, ou do body?
75
+ * `price` — vem do catálogo/DB, ou do body?
76
+ * `XP`/`reward` — calculado server-side pelo evento, ou do body?
77
+ * `ownership` — validado contra o DB, ou confiado no body?
78
+ * `status` — transição validada server-side, ou setado do body?
79
+ * `timestamps` — `now()`/DB, ou do body?
80
+ 4. **Testar mass assignment** — envie campos não-enviados pela UI. Gravados?
81
+ 5. **Testar forjamento** — envie um valor de autoridade forjado (role=admin,
82
+ price=0, xp=99999). O servidor aceita e age?
83
+ 6. **Confirmar com evidência** — reproduza o forjamento e observe o efeito.
84
+ 7. **Reportar** via `templates/audit-report.md`.
85
+
86
+ ## Questions to Ask
87
+
88
+ * Quais campos o endpoint aceita? Qual é a allowlist (se houver)?
89
+ * `userId` no handler vem da sessão ou do body/query? (se do body, forja identidade)
90
+ * `role`/`permissions` — lidos da sessão/DB ou do payload?
91
+ * `price`/`amount` — do catálogo server-side ou do body?
92
+ * `XP`/`reward`/`points` — calculados server-side ou enviados pelo cliente?
93
+ * `ownerId`/`assignedTo` — validado contra o DB ou confiado?
94
+ * `status` — o cliente pode setar direto (paid/active/deleted)?
95
+ * `timestamps` (`createdAt`, `expiresAt`) — `now()` server-side ou do body?
96
+ * Há bind automático do body ao modelo (mass assignment)? Qual allowlist o impede?
97
+ * Um campo que a UI nunca envia — se eu enviar, é gravado?
98
+
99
+ ## Attack Patterns
100
+
101
+ ```text
102
+ userId from body
103
+ POST /comment {postId, userId: <other>} → comentário em nome de outro?
104
+ (correto: userId = token.sub, ignorar body.userId)
105
+
106
+ role from body (mass assignment)
107
+ PUT /profile {bio, role:"admin"} → role gravado?
108
+
109
+ price from body
110
+ POST /checkout {itemId, price: 0} → checkout grátis?
111
+ POST /checkout {itemId, price: -50} → reembolso invertido?
112
+
113
+ XP from body
114
+ POST /grant {userId, xp: 99999} → quem chama define o XP?
115
+ (correto: xp calculado pela ação/evento server-side)
116
+
117
+ ownership from body
118
+ POST /transfer {resourceId, toOwnerId} → caller é dono? validado?
119
+
120
+ status from body
121
+ POST /order/{id}/update {status:"paid"} → cliente marca como pago?
122
+ (correto: transição só via gateway callback verificado)
123
+
124
+ timestamps from body
125
+ POST /post {content, createdAt:"1970-..."} → data forjada? expired reanimado?
126
+
127
+ permissions from body
128
+ PUT /user/{id} {permissions:["*"]} → auto-concessão?
129
+
130
+ mass assignment via generic bind
131
+ handler: model.update(req.body) → sem allowlist → todos os campos
132
+ enviar {isAdmin: true} → gravado?
133
+ ```
134
+
135
+ ## Evidence Requirements
136
+
137
+ * **Nomear o campo** e classificá-lo (valor de autoridade da lista canônica, ou outro
138
+ sensível).
139
+ * **Mostrar de onde o servidor lê** — session/DB vs body/params. Cite a linha/mecanismo.
140
+ * **Mostrar o forjamento** — request com o valor forjado e o efeito observado.
141
+ * **Escalar confiança:**
142
+ * `CONFIRMED` — reproduziu o forjamento e observou o efeito (role virou admin, price
143
+ zerou, XP inflou).
144
+ * `HIGH CONFIDENCE` — handler visivelmente lê do body um valor de autoridade, sem
145
+ reprodução.
146
+ * `POSSIBLE` — campo suspeito aceito, efeito não confirmado.
147
+ * `SPECULATIVE` — "deveria ser derivado" sem rastrear.
148
+ * Forjamento de `role`/`permissions`/`ownership` que escala privilégio = mínimo
149
+ `HIGH CONFIDENCE` se reproduzido.
150
+
151
+ ## False Positives
152
+
153
+ * **Servidor deriva corretamente** — se `userId = token.sub`, `role` da sessão, `price`
154
+ do catálogo, "campo no body" é ignorado. Confirmar que o servidor *ignora* o campo
155
+ antes de reportar.
156
+ * **Allowlist de campos** — se o bind usa uma allowlist explícita (`{bio, name}`) e
157
+ descarta o resto, mass assignment é defendido. Confirmar a allowlist.
158
+ * **Campo é legítimo do cliente** — `bio`, `displayName`, `preferences` *devem* vir do
159
+ cliente. Não reportar como "input trust" o que é input legítimo.
160
+ * **Timestamp do cliente é referência, não autoridade** — se `scheduledAt` é um input
161
+ legítimo de agendamento (com validação), não é o mesmo que forjar `createdAt`.
162
+ * **Status via callback verificado** — se `paid` só é setado pelo callback do gateway
163
+ com assinatura/verificação, o cliente não pode forjar. Confirmar o caminho.
164
+ * **Role do body é validado contra a sessão** — se o servidor aceita `role` no body mas
165
+ só permite transições que o caller já tem, é defensivo. Raro; confirmar.
166
+
167
+ ## Output Format
168
+
169
+ Para cada valor de autoridade aceito (não derivado) do cliente, um finding via
170
+ `templates/audit-report.md`. Em **Reproduction**, dê o request com o valor forjado e o
171
+ efeito. Em **Affected component**, nomeie o endpoint e o campo. Em **Root cause**, diga
172
+ que o servidor lê do body em vez de derivar (cite onde), ou que falta allowlist (mass
173
+ assignment). Em **Recommendation**, indique derivação server-side (token.sub, catálogo,
174
+ cálculo por evento) e allowlist de campos no bind.
175
+
176
+ Apresente a tabela de campos por endpoint (campo | sensível? | derivado ou aceito? |
177
+ ✓/✗). Privilégios (`role`/`permissions`/`ownership`) e valor (`price`/`XP`/`reward`)
178
+ primeiro; timestamps e status depois.
@@ -0,0 +1,89 @@
1
+ # Audit Report Template
2
+
3
+ Template para relatórios de auditoria. Toda skill de auditoria produz findings neste
4
+ formato. Copie este template e preencha. Ver `AGENTS.md` § 2 para a escala de evidência
5
+ e `docs/skill-authoring.md` para a estrutura de skills.
6
+
7
+ ---
8
+
9
+ # Audit Report — <target>
10
+
11
+ **Date:** <YYYY-MM-DD>
12
+ **Target:** <system / component / feature audited>
13
+ **Scope:** <what was in scope; what was explicitly out of scope>
14
+ **Skills used:** <comma-separated skill names, e.g. adversarial-review, business-logic-audit>
15
+ **References consulted:** <names from references/*.yaml, or "none">
16
+
17
+ ## Summary
18
+
19
+ <1–3 paragraphs. Número total de findings por severidade. As 2–3 conclusões mais
20
+ importantes. Não listar todos os findings aqui — apenas o que um humano precisa saber
21
+ primeiro.>
22
+
23
+ ### Findings by severity
24
+
25
+ | Severity | Count |
26
+ |---|---|
27
+ | Critical | <n> |
28
+ | High | <n> |
29
+ | Medium | <n> |
30
+ | Low | <n> |
31
+
32
+ ### Findings by confidence
33
+
34
+ | Confidence | Count |
35
+ |---|---|
36
+ | CONFIRMED | <n> |
37
+ | HIGH CONFIDENCE | <n> |
38
+ | POSSIBLE | <n> |
39
+ | SPECULATIVE | <n> |
40
+
41
+ > Findings `SPECULATIVE` são riscos a verificar, **não** bugs confirmados. Não devem
42
+ > bloquear implementação.
43
+
44
+ ---
45
+
46
+ ## Findings
47
+
48
+ ### Finding 1 — <short title>
49
+
50
+ | Field | Value |
51
+ |---|---|
52
+ | **Severity** | Critical \| High \| Medium \| Low |
53
+ | **Confidence** | CONFIRMED \| HIGH CONFIDENCE \| POSSIBLE \| SPECULATIVE |
54
+ | **Affected component** | <file(s) / module(s) / endpoint(s)> |
55
+ | **Affected flow** | <the user or system flow this breaks> |
56
+ | **Reproduction** | <step-by-step, or request sequence; concrete enough to redo> |
57
+ | **Expected behavior** | <what should happen> |
58
+ | **Actual behavior** | <what does happen> |
59
+ | **Root cause** | <the mechanism — why it happens, not just that it does> |
60
+ | **Impact** | <what an attacker or user can achieve; blast radius> |
61
+ | **Recommendation** | <concrete fix; where to enforce it (server, DB, both)> |
62
+
63
+ **Evidence:** <logs, test output, request/response, or "no reproduction yet — reasoning only". Link or paste.>
64
+
65
+ **False-positive check:** <why this is NOT an acceptable/intended behavior — or "considered: <X>; ruled out because <Y>". If you cannot rule it out, lower confidence.>
66
+
67
+ ---
68
+
69
+ ### Finding 2 — <short title>
70
+
71
+ <repeat the block above for each finding>
72
+
73
+ ---
74
+
75
+ ## Deduplication note
76
+
77
+ <Se múltiplas skills apontaram o mesmo defeito, registre aqui quais foram consolidadas
78
+ em um único finding e por quê. Se nenhuma sobreposição, escreva "No overlapping findings
79
+ across skills.">
80
+
81
+ ## Out of scope / not investigated
82
+
83
+ <Quais áreas foram deixadas de fora e por quê — para que um leitor saiba o que NÃO foi
84
+ verificado. Honestidade sobre limites é parte do relatório.>
85
+
86
+ ## Next steps
87
+
88
+ <Ordenado por prioridade. Quais findings exigem ação imediata, quais são riscos a
89
+ monitorar, quais precisam de mais investigação para subir de POSSIBLE para CONFIRMED.>
@@ -0,0 +1,107 @@
1
+ # Bug Report Template
2
+
3
+ Template para relatórios de bugs individuais. Cada bug é um documento autônomo que pode
4
+ ser referenciado, anexado a uma issue, ou consolidado em um `audit-report.md` maior.
5
+
6
+ ---
7
+
8
+ # Bug Report — <short title>
9
+
10
+ **Date:** <YYYY-MM-DD>
11
+ **Target version:** <version / commit / environment>
12
+ **Reported by:** <skill name(s) + methodology>
13
+
14
+ ## Summary
15
+
16
+ <1-3 frases. O que está acontecendo e por que é um bug.>
17
+
18
+ ## Severity
19
+
20
+ | Critical | High | Medium | Low |
21
+ |---|---|---|---|
22
+
23
+ ## Confidence
24
+
25
+ | CONFIRMED | HIGH CONFIDENCE | POSSIBLE | SPECULATIVE |
26
+ |---|---|---|---|
27
+
28
+ *Ver `AGENTS.md` § 2 para a escala de evidência.*
29
+
30
+ ## Affected component
31
+
32
+ <file(s) / module(s) / endpoint(s) / route(s) — ex: `src/app/api/checkout/route.ts`>
33
+
34
+ ## Affected flow
35
+
36
+ <O fluxo que este bug afeta — ex: "fluxo de criação de pedido, etapa de cobrança">
37
+
38
+ ## Reproduction
39
+
40
+ ### Steps
41
+
42
+ 1. `<passo 1>`
43
+ 2. `<passo 2>`
44
+ 3. `<passo 3>`
45
+
46
+ ### Request/response
47
+
48
+ ```http
49
+ <request exato — método, path, headers, body>
50
+ ```
51
+
52
+ ```http
53
+ <response observada>
54
+ ```
55
+
56
+ ### Environment
57
+
58
+ - **Browser:** Chrome 120 / Firefox 115 / Safari 17
59
+ - **Platform:** Mobile / Desktop / Tablet
60
+ - **Auth state:** Authenticated / Unauthenticated / Role: admin
61
+ - **Data state:** <estado prévio necessário: saldo, recursos, flags>
62
+
63
+ ## Expected behavior
64
+
65
+ <O que deveria acontecer, segundo a especificação, regra de negócio, ou princípio.>
66
+
67
+ ## Actual behavior
68
+
69
+ <O que de fato acontece — o comportamento incorreto.>
70
+
71
+ ## Root cause
72
+
73
+ <O mecanismo — por que acontece, não só que acontece. Ex: "o handler não checa
74
+ ownership porque o middleware de authz não cobre esta rota", "o incremento é lido do
75
+ cache e reescrito sem atomicidade".>
76
+
77
+ ## Impact
78
+
79
+ * **Blast radius:** <quantos usuários, recursos, transações?>
80
+ * **Data loss:** <sim / não / parcial — qual dado?>
81
+ * **Exploitability:** <trivial / médio / difícil — o que o atacante precisa?>
82
+
83
+ ## Recommendation
84
+
85
+ ```text
86
+ <Ação concreta. Onde e como corrigir. Ex: "Adicionar checagem de ownership no handler
87
+ DELETE /order/{id} antes de executar a deleção.">
88
+ ```
89
+
90
+ ## Evidence
91
+
92
+ <logs, screenshots, video, request/response adicional, ou "não reproduzido — apenas
93
+ análise de código".>
94
+
95
+ ## False-positive check
96
+
97
+ *Por que isto NÃO é comportamento aceitável ou intencional:*
98
+
99
+ - <se já considerou: "talvez seja intencional porque..."> → <ruled out: documentação /
100
+ regra de negócio / produto confirma>
101
+ - <se não consegue ruled out: baixar confiança para POSSIBLE e marcar como "precisa
102
+ decisão de produto">
103
+
104
+ ## References
105
+
106
+ <skills usadas, referências consultadas em `references/*.yaml`, links para código
107
+ relevante.>
@@ -0,0 +1,122 @@
1
+ # Design Review Template
2
+
3
+ Template para revisões de design de frontend (UX + visual + interação + animação +
4
+ acessibilidade + referências externas). Consolida a saída das skills de frontend em um
5
+ relatório único, com síntese de pesquisa quando aplicável.
6
+
7
+ ---
8
+
9
+ # Design Review — <screen / flow>
10
+
11
+ **Date:** <YYYY-MM-DD>
12
+ **Target:** <tela/fluxo/componente revisado>
13
+ **Skills used:** <ex: ux-review, visual-quality-review, interaction-design,
14
+ animation-review, accessibility-review>
15
+ **References consulted:** <fontes de references/frontend.yaml + ux.yaml usadas>
16
+
17
+ ## Executive summary
18
+
19
+ <2-3 parágrafos. O que está bom, o que está quebrado, e o que deve ser corrigido antes
20
+ de lançar. Prioridade geral (ship / ship-with-fixes / fix-first).>
21
+
22
+ ## Verdict
23
+
24
+ | **Ship** | **Ship with fixes** | **Fix first** |
25
+ |---|---|---|
26
+
27
+ ## Dimensions
28
+
29
+ Para cada dimensão, um veredicto resumido + pointer para os findings detalhados:
30
+
31
+ | Dimension | Verdict | Findings |
32
+ |---|---|---|
33
+ | UX (clareza, hierarquia, carga cognitiva, feedback, affordances, consistência, navegação, empty states, erros, loading) | ✅ / ⚠️ / ❌ | #F1..F5 |
34
+ | Visual (tipografia, spacing, hierarchy, density, contrast, composition, noise, AI slop) | ✅ / ⚠️ / ❌ | #F6..F8 |
35
+ | Interaction (hover, focus, pressed, disabled, loading, transitions, feedback, micro-interactions) | ✅ / ⚠️ / ❌ | #F9..F10 |
36
+ | Animation (propósito, timing, easing, hierarchy, continuity, interruption, reduced motion) | ✅ / ⚠️ / ❌ | #F11 |
37
+ | Accessibility (keyboard, SR, focus, semantic HTML, contrast, touch targets, reduced motion, forms, errors) | ✅ / ⚠️ / ❌ | #F12..F14 |
38
+
39
+ ---
40
+
41
+ ## Findings
42
+
43
+ ### Finding 1 — <short title>
44
+
45
+ | Field | Value |
46
+ |---|---|
47
+ | **Severity** | Critical \| High \| Medium \| Low |
48
+ | **Confidence** | CONFIRMED \| HIGH CONFIDENCE \| POSSIBLE \| SPECULATIVE |
49
+ | **Dimension** | UX \| Visual \| Interaction \| Animation \| Accessibility |
50
+ | **Affected component** | <elemento/tela> |
51
+ | **Affected flow** | <fluxo> |
52
+ | **Reproduction** | <o que o usuário vê vs o que deveria ver> |
53
+ | **Expected behavior** | <esperado> |
54
+ | **Actual behavior** | <observado> |
55
+ | **Root cause** | <princípio violado — ex: "contraste 2.9:1 falha WCAG 1.4.3", "focus ring removido com `outline: none`", "empty state sem CTA"> |
56
+ | **Impact** | <consequência para o usuário> |
57
+ | **Recommendation** | <correção concreta> |
58
+
59
+ ---
60
+
61
+ ### Finding N — <short title>
62
+
63
+ <repetir o bloco acima>
64
+
65
+ ---
66
+
67
+ ## Research synthesis (se pesquisa foi realizada)
68
+
69
+ *Usar o formato de síntese de pesquisa do `AGENTS.md` § 5. Ex:*
70
+
71
+ ## Research
72
+
73
+ ### Reference
74
+ [Impeccable]
75
+
76
+ ### Relevant Pattern
77
+ Espaçamento consistente baseado em 4px, hierarquia tipográfica clara, ausência de
78
+ decoração sem função.
79
+
80
+ ### Why It Matters
81
+ O que separa design de "amador" de "profissional" é a consistência rítmica e a
82
+ disciplina visual.
83
+
84
+ ### Adaptation
85
+ Aplicar o sistema de 4px no spacing dos cards da dashboard, que hoje varia
86
+ aleatoriamente.
87
+
88
+ ### Trade-offs
89
+ Requer auditoria de todos os componentes existentes para uniformizar.
90
+
91
+ ### Recommendation
92
+ Adotar as 3 primeiras regras do Impeccable (spacing system, type scale, no-orphan
93
+ decoration) como padrão do projeto.
94
+
95
+ ---
96
+
97
+ ## Accessibility checklist (WCAG spot-check)
98
+
99
+ | Check | Pass | Fail | N/A |
100
+ |---|---|---|---|
101
+ | Keyboard reachable (all interactive elements) | | | |
102
+ | Focus visible (no `outline: none` without substitute) | | | |
103
+ | Focus trap correct in modals | | | |
104
+ | Alt text on informative images | | | |
105
+ | aria-label on semantic icons | | | |
106
+ | aria-live on dynamic content | | | |
107
+ | Semantic HTML (`<button>`, `<nav>`, `<h1-h6>`) | | | |
108
+ | Text contrast ≥ 4.5:1 | | | |
109
+ | Touch targets ≥ 44×44px | | | |
110
+ | `<label>` on every form input | | | |
111
+ | Errors text + aria-live (not color-only) | | | |
112
+ | `prefers-reduced-motion` respected | | | |
113
+
114
+ ---
115
+
116
+ ## Out of scope / not reviewed
117
+
118
+ <O que não foi revisado e por quê.>
119
+
120
+ ## Next steps
121
+
122
+ <Priorizado. Fix-first findings primeiro; riscos a monitorar depois.>
@@ -0,0 +1,96 @@
1
+ # Research Report Template
2
+
3
+ Template para relatórios de pesquisa. Consolida a saída das research skills
4
+ (`reference-research`, `github-reference-research`, `market-research`,
5
+ `implementation-research`) em um documento único com síntese obrigatória — nunca apenas
6
+ uma lista de links (ver `AGENTS.md` § 5).
7
+
8
+ ---
9
+
10
+ # Research Report — <question / feature / problem>
11
+
12
+ **Date:** <YYYY-MM-DD>
13
+ **Research question:** <a pergunta que guiou a pesquisa>
14
+ **Problem type:** <animation | ux | visual | architecture | security | engineering |
15
+ product | implementation | discovery>
16
+ **Research level:** <none | proportional | full> *(proporcional a uncertainty +
17
+ impact + irreversibility — ver `AGENTS.md` § 6)*
18
+ **Skills used:** <ex: reference-research, github-reference-research, market-research>
19
+ **Router:** <research-router → qual despacho>
20
+
21
+ ## Executive summary
22
+
23
+ <1-2 parágrafos. A resposta direta à research question, a recomendação principal, e o
24
+ nível de confiança geral.>
25
+
26
+ ---
27
+
28
+ ## Research
29
+
30
+ ### Reference
31
+ [Name]
32
+
33
+ ### Relevant Pattern
34
+ O que foi encontrado.
35
+
36
+ ### Why It Matters
37
+ Por que este padrão é útil.
38
+
39
+ ### Adaptation
40
+ Como ele poderia se aplicar ao projeto atual.
41
+
42
+ ### Trade-offs
43
+ Que problemas ele introduz.
44
+
45
+ ### Recommendation
46
+ O que deve de fato ser adotado.
47
+
48
+ ---
49
+
50
+ ### Reference 2 — <name>
51
+
52
+ <repetir o bloco de síntese. Consolidar em um bloco quando múltiplas fontes dão a mesma
53
+ recomendação; citar as fontes no cabeçalho.>
54
+
55
+ ---
56
+
57
+ ## Convergence & divergence (para market research)
58
+
59
+ ### Convergência (adotar)
60
+ - <onde os produtos/fontes concordam — padrão maduro>
61
+
62
+ ### Divergência (avaliar)
63
+ - <onde divergem — espaço para diferenciação ou decisão>
64
+
65
+ ---
66
+
67
+ ## Sources & authority
68
+
69
+ | Source | Type | Authority | Used for |
70
+ |---|---|---|---|
71
+ | <name> | methodology \| heuristic \| inspiration \| implementation \| discovery | established \| vendor \| community \| curated | <o que se extraiu> |
72
+
73
+ > **Inspiração ≠ evidência** — fontes `type: inspiration` / `authority: curated`
74
+ > (ex: Dribbble, dark.design) calibram gosto, nunca justificam uma decisão técnica
75
+ > (ver `AGENTS.md` § 1).
76
+
77
+ ## Confidence assessment
78
+
79
+ *Classifique a confiança da recomendação como um todo, não por fonte:*
80
+
81
+ | CONFIRMED | HIGH CONFIDENCE | POSSIBLE | SPECULATIVE |
82
+ |---|---|---|---|
83
+
84
+ - **O que confirmaria/subiria a confiança:** <ex: "protótipo com usuários reais",
85
+ "teste de carga", "prova de conceito no contexto">
86
+ - **O que é incerto:** <ex: "padrão observado em 1 produto apenas", "benchmark de
87
+ artigo de 2023">
88
+
89
+ ## Out of scope / not researched
90
+
91
+ <O que não foi pesquisado e por quê (proporcionalidade, custo, irrelevância).>
92
+
93
+ ## Next steps
94
+
95
+ <Próximas ações: prova de conceito, teste com usuários, protótipo, ou decisão de
96
+ implementação já tomada.>