jarvis-ai-framework 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 (240) hide show
  1. package/AGENTS.md +416 -0
  2. package/LICENSE +21 -0
  3. package/README.md +190 -0
  4. package/agents/AGENTS.md +234 -0
  5. package/agents/README.md +309 -0
  6. package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
  7. package/agents/engineering/eng.agent.md +303 -0
  8. package/agents/engineering/eng.bug-hunter.md +386 -0
  9. package/agents/engineering/eng.cybersecurity.agent.md +503 -0
  10. package/agents/engineering/eng.dev-code-reviewer.md +148 -0
  11. package/agents/engineering/eng.docs-writer.md +152 -0
  12. package/agents/engineering/eng.frontend.agent.md +117 -0
  13. package/agents/engineering/eng.rpa.agent.md +215 -0
  14. package/agents/engineering/eng.tech-analyst.agent.md +102 -0
  15. package/agents/engineering/eng.ux-designer.agent.md +193 -0
  16. package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
  17. package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
  18. package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
  19. package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
  20. package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
  21. package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
  22. package/agents/product/prod.pm-checker.md +52 -0
  23. package/bin/commands/docs-publish.js +184 -0
  24. package/bin/commands/docs-sync.js +139 -0
  25. package/bin/commands/info.js +87 -0
  26. package/bin/commands/init.js +237 -0
  27. package/bin/commands/install-rtk.js +90 -0
  28. package/bin/commands/list.js +48 -0
  29. package/bin/commands/qa-signoff.js +112 -0
  30. package/bin/commands/whoami.js +43 -0
  31. package/bin/jarvis.js +159 -0
  32. package/bin/lib/auth/session.js +56 -0
  33. package/bin/lib/config/constants.js +123 -0
  34. package/bin/lib/config/ide-config.js +233 -0
  35. package/bin/lib/core/scanner.js +124 -0
  36. package/bin/lib/core/sync-engine.js +551 -0
  37. package/bin/lib/docs/fetch-file.sh +41 -0
  38. package/bin/lib/docs/publish-file.sh +284 -0
  39. package/bin/lib/docs/validate-frontmatter.js +157 -0
  40. package/bin/lib/env-loader.js +198 -0
  41. package/bin/lib/tasks/comment.js +131 -0
  42. package/bin/lib/utils/git-parser.js +145 -0
  43. package/bin/lib/utils/logger.js +104 -0
  44. package/bin/lib/utils/npmrc-parser.js +106 -0
  45. package/bin/lib/utils/paths.js +55 -0
  46. package/bin/lib/utils/ui.js +59 -0
  47. package/bin/lib/vcs/api.js +312 -0
  48. package/bin/lib/vcs/create-issue.js +43 -0
  49. package/bin/lib/vcs/create-merge.js +43 -0
  50. package/bin/lib/vcs/fetch-raw.js +30 -0
  51. package/bin/postinstall.js +41 -0
  52. package/members.md +25 -0
  53. package/package.json +55 -0
  54. package/rules/AGENTS.md +205 -0
  55. package/rules/engineering/data/data-rules.md +200 -0
  56. package/rules/engineering/eng-rules.md +243 -0
  57. package/rules/engineering/eng-security-rules.md +186 -0
  58. package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
  59. package/rules/engineering/eng.bump-rules.md +27 -0
  60. package/rules/engineering/eng.docs-scraping-rules.md +64 -0
  61. package/rules/engineering/eng.downstream-flow-rules.md +297 -0
  62. package/rules/engineering/eng.integrations-rules.md +73 -0
  63. package/rules/engineering/eng.plan-rules.md +333 -0
  64. package/rules/engineering/eng.pr-rules.md +359 -0
  65. package/rules/engineering/eng.pre-pr-rules.md +103 -0
  66. package/rules/engineering/eng.start-rules.md +246 -0
  67. package/rules/engineering/eng.tech-spec-rules.md +968 -0
  68. package/rules/engineering/eng.work-rules.md +312 -0
  69. package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
  70. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
  71. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
  72. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
  73. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
  74. package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
  75. package/rules/product/README.md +24 -0
  76. package/rules/product/prod-rules.md +151 -0
  77. package/rules/rtk-rules.md +68 -0
  78. package/skills/AGENTS.md +290 -0
  79. package/skills/SKILLS-ROADMAP.md +333 -0
  80. package/skills/churn-audit/SKILL.md +385 -0
  81. package/skills/context-detect/SKILL.md +399 -0
  82. package/skills/context-detect/assets/context-profile-template.md +127 -0
  83. package/skills/docs-central/README.md +310 -0
  84. package/skills/docs-central/SKILL.md +423 -0
  85. package/skills/docs-index/SKILL.md +377 -0
  86. package/skills/eng-ai-engineer/SKILL.md +296 -0
  87. package/skills/eng-arch-c4/SKILL.md +358 -0
  88. package/skills/eng-arch-c4/assets/example-code.md +189 -0
  89. package/skills/eng-arch-c4/assets/example-component.md +105 -0
  90. package/skills/eng-arch-c4/assets/example-container.md +104 -0
  91. package/skills/eng-arch-c4/assets/example-context.md +81 -0
  92. package/skills/eng-backend/SKILL.md +776 -0
  93. package/skills/eng-browser-extension-builder/SKILL.md +385 -0
  94. package/skills/eng-cybersecurity/SKILL.md +645 -0
  95. package/skills/eng-data-bi/SKILL.md +199 -0
  96. package/skills/eng-data-debug/SKILL.md +307 -0
  97. package/skills/eng-data-engineer/SKILL.md +256 -0
  98. package/skills/eng-data-onboard/SKILL.md +310 -0
  99. package/skills/eng-data-orchestrator/SKILL.md +426 -0
  100. package/skills/eng-design-system/SKILL.md +619 -0
  101. package/skills/eng-docs-write/SKILL.md +312 -0
  102. package/skills/eng-frontend/SKILL.md +913 -0
  103. package/skills/eng-jira-comment/SKILL.md +17 -0
  104. package/skills/eng-microfrontend/SKILL.md +602 -0
  105. package/skills/eng-ms-trace/SKILL.md +469 -0
  106. package/skills/eng-nestjs/SKILL.md +791 -0
  107. package/skills/eng-performance-engineer/SKILL.md +312 -0
  108. package/skills/eng-pr/SKILL.md +339 -0
  109. package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
  110. package/skills/eng-qa-bug-report/SKILL.md +1088 -0
  111. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
  112. package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
  113. package/skills/eng-qa-dev-guide/SKILL.md +164 -0
  114. package/skills/eng-qa-e2e/SKILL.md +400 -0
  115. package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
  116. package/skills/eng-qa-exploratory/SKILL.md +188 -0
  117. package/skills/eng-qa-gate/SKILL.md +370 -0
  118. package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
  119. package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
  120. package/skills/eng-qa-quality-report/SKILL.md +412 -0
  121. package/skills/eng-qa-test-plan/SKILL.md +466 -0
  122. package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
  123. package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
  124. package/skills/eng-qa-testsprite/SKILL.md +325 -0
  125. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
  126. package/skills/eng-qa-unit-test/SKILL.md +471 -0
  127. package/skills/eng-rabbitmq/SKILL.md +661 -0
  128. package/skills/eng-scraper/SKILL.md +683 -0
  129. package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
  130. package/skills/eng-security-patch/SKILL.md +378 -0
  131. package/skills/eng-security-triage/SKILL.md +266 -0
  132. package/skills/eng-task-comment/SKILL.md +60 -0
  133. package/skills/eng-tech-analyst/SKILL.md +529 -0
  134. package/skills/eng-threat-model/SKILL.md +161 -0
  135. package/skills/init-jarvis/SKILL.md +1304 -0
  136. package/skills/init-jarvis/assets/mcp-configs.md +389 -0
  137. package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
  138. package/skills/init-jarvis/assets/setup-guide.md +360 -0
  139. package/skills/lovable-prompt-generator/SKILL.md +304 -0
  140. package/skills/prod-roadmap-report/README.md +303 -0
  141. package/skills/prod-roadmap-report/SKILL.md +198 -0
  142. package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
  143. package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
  144. package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
  145. package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
  146. package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
  147. package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
  148. package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
  149. package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
  150. package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
  151. package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
  152. package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
  153. package/skills/prod-specs/SKILL.md +108 -0
  154. package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
  155. package/skills/prod-specs/references/prod.spec.epic.md +107 -0
  156. package/skills/prod-specs/references/prod.spec.frd.md +135 -0
  157. package/skills/prod-specs/references/prod.spec.issue.md +145 -0
  158. package/skills/prod-specs/references/prod.spec.prd.md +118 -0
  159. package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
  160. package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
  161. package/skills/prod-specs/templates/prod-epic-template.md +76 -0
  162. package/skills/prod-specs/templates/prod-frd-template.md +172 -0
  163. package/skills/prod-specs/templates/prod-issue-template.md +68 -0
  164. package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
  165. package/skills/prod-specs/templates/prod-prd-template.md +173 -0
  166. package/skills/prod-specs-update/SKILL.md +272 -0
  167. package/skills/report-issue/SKILL.md +156 -0
  168. package/taxonomy.md +270 -0
  169. package/templates/AGENTS.md +189 -0
  170. package/templates/CDD aplicado a Prompts.md +182 -0
  171. package/templates/ENV-template.md +187 -0
  172. package/templates/engineering/AGENTS-template.md +71 -0
  173. package/templates/engineering/ARD-template.md +193 -0
  174. package/templates/engineering/CONTACTS-template.md +135 -0
  175. package/templates/engineering/PR-template.md +40 -0
  176. package/templates/engineering/RFC-Playbook.md +325 -0
  177. package/templates/engineering/RFC-template.md +199 -0
  178. package/templates/engineering/architecture-template.md +277 -0
  179. package/templates/engineering/breakdown-subtasks-template.md +582 -0
  180. package/templates/engineering/c4-model-template.md +516 -0
  181. package/templates/engineering/data-contract-template.md +135 -0
  182. package/templates/engineering/data-pipeline-template.md +163 -0
  183. package/templates/engineering/plan-template.md +255 -0
  184. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
  185. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
  186. package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
  187. package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
  188. package/templates/engineering/qa/qa.quality-report-template.md +130 -0
  189. package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
  190. package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
  191. package/templates/engineering/swagger-template.md +145 -0
  192. package/templates/engineering/tech-spec-template.md +497 -0
  193. package/templates/engineering/work-progress-template.md +155 -0
  194. package/workflows/AGENTS.md +240 -0
  195. package/workflows/README.md +160 -0
  196. package/workflows/all-tools.md +11 -0
  197. package/workflows/engineering/data/data.contract.md +202 -0
  198. package/workflows/engineering/data/data.new-pipeline.md +234 -0
  199. package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
  200. package/workflows/engineering/eng.bug-audit.md +591 -0
  201. package/workflows/engineering/eng.build-tech-spec.md +1116 -0
  202. package/workflows/engineering/eng.create-ard-from-code.md +259 -0
  203. package/workflows/engineering/eng.create-ard.md +382 -0
  204. package/workflows/engineering/eng.create-rfc.md +245 -0
  205. package/workflows/engineering/eng.debug.md +479 -0
  206. package/workflows/engineering/eng.docs.md +40 -0
  207. package/workflows/engineering/eng.light-arch.md +84 -0
  208. package/workflows/engineering/eng.plan.md +213 -0
  209. package/workflows/engineering/eng.pr.md +466 -0
  210. package/workflows/engineering/eng.pre-pr.md +167 -0
  211. package/workflows/engineering/eng.review.md +185 -0
  212. package/workflows/engineering/eng.rpa.robot.md +342 -0
  213. package/workflows/engineering/eng.security-audit.md +312 -0
  214. package/workflows/engineering/eng.security-incident.md +275 -0
  215. package/workflows/engineering/eng.security-pipeline.md +210 -0
  216. package/workflows/engineering/eng.security-review.md +235 -0
  217. package/workflows/engineering/eng.start.md +494 -0
  218. package/workflows/engineering/eng.work.md +558 -0
  219. package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
  220. package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
  221. package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
  222. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
  223. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
  224. package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
  225. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
  226. package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
  227. package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
  228. package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
  229. package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
  230. package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
  231. package/workflows/product/prod.roadmap.preview.md +110 -0
  232. package/workflows/product/prod.spec.breakdown.md +163 -0
  233. package/workflows/product/prod.spec.clarify.md +178 -0
  234. package/workflows/product/prod.spec.epic.md +154 -0
  235. package/workflows/product/prod.spec.frd.md +96 -0
  236. package/workflows/product/prod.spec.issue.md +145 -0
  237. package/workflows/product/prod.spec.md +60 -0
  238. package/workflows/product/prod.spec.prd.md +100 -0
  239. package/workflows/taxonomy.md +92 -0
  240. package/workflows/warm-up.md +574 -0
@@ -0,0 +1,400 @@
1
+ ---
2
+ name: eng-qa-e2e
3
+ description: >
4
+ Especialista em testes E2E (End-to-End) escritos em linguagem natural para QA.
5
+ Usa Stagehand para criar testes resilientes a mudanças de UI, sem seletores hardcoded.
6
+ Suporta exportação para Cypress quando necessário para produção/CI.
7
+ Trigger: Use quando o QA precisar criar testes de sistema E2E em linguagem natural,
8
+ validar fluxos de usuário completos, ou converter cenários de teste em código executável.
9
+ license: AGPL-3.0
10
+ compatibility: Designed for Claude Code (or similar products)
11
+ allowed-tools: Read Write Edit Grep Glob Bash
12
+ metadata:
13
+ author: jarvis-team
14
+ version: "1.0"
15
+ # Campos Claude Code-specific (não fazem parte da spec oficial agentskills.io):
16
+ argument-hint: "[cenário ou caminho do arquivo de cenários]"
17
+ disable-model-invocation: false
18
+ ---
19
+
20
+ # QA E2E - Testes End-to-End em Linguagem Natural
21
+
22
+ Você é um **especialista em testes E2E** que ajuda o QA a criar testes de sistema resilientes usando linguagem natural com Stagehand — sem precisar conhecer seletores CSS, XPath ou a estrutura interna do HTML.
23
+
24
+ ## Objetivo
25
+
26
+ Transformar cenários de teste descritos em linguagem natural (português ou inglês) em testes E2E executáveis, resilientes a mudanças de UI. Quando necessário para CI/CD ou produção, exportar para Cypress.
27
+
28
+ ## Entrada
29
+
30
+ - `$ARGUMENTS` - Cenário de teste em linguagem natural ou caminho para arquivo `.feature` / `.md` com cenários
31
+ - Exemplo direto: `"usuário faz login, adiciona produto ao carrinho, finaliza compra e recebe confirmação"`
32
+ - Exemplo arquivo: `tests/e2e/checkout.feature`
33
+
34
+ ## Recursos
35
+
36
+ - **Referência**: https://docs.stagehand.dev
37
+ - **Saída**: `tests/e2e/{nome-do-cenario}.spec.ts`
38
+
39
+ ---
40
+
41
+ ## Pré-requisito
42
+
43
+ ### Dependências
44
+
45
+ ```bash
46
+ npm install @browserbasehq/stagehand playwright zod dotenv --save-dev
47
+ # Para exportação Cypress (opcional):
48
+ npm install cypress --save-dev
49
+ ```
50
+
51
+ ### Variáveis de ambiente
52
+
53
+ ```bash
54
+ # .env
55
+ BROWSERBASE_API_KEY=... # Opcional — usar env: "LOCAL" sem conta
56
+ BROWSERBASE_PROJECT_ID=...
57
+ OPENAI_API_KEY=... # ou ANTHROPIC_API_KEY
58
+ APP_URL=https://app.exemplo.com # URL base da aplicação
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Quando Usar
64
+
65
+ Use este skill quando:
66
+ - QA precisa criar testes E2E sem conhecer seletores ou estrutura do HTML
67
+ - Quiser testar fluxos completos de usuário (login → ação → validação)
68
+ - Precisar de testes de regressão que sobrevivam a redesigns de UI
69
+ - Smoke tests pós-deploy descritos em linguagem natural
70
+ - Cenários de aceitação do produto precisam virar testes executáveis
71
+
72
+ **NÃO usar quando:**
73
+ - Testes unitários ou de integração → usar `qa-unit-test`
74
+ - Testes com TestSprite MCP → usar `qa-testsprite`
75
+ - O projeto já tem Cypress configurado com boa cobertura → manter Cypress
76
+ - Ambiente sem Node.js ou sem acesso a browser headless
77
+
78
+ ---
79
+
80
+ ## Validação de Entrada
81
+
82
+ ```
83
+ Se $ARGUMENTS está vazio:
84
+ → Solicitar ao QA: "Descreva o cenário de teste. Exemplo:
85
+ 'Usuário acessa a home, clica em login, preenche email e senha,
86
+ navega para o dashboard e vê seus pedidos recentes.'"
87
+
88
+ Se $ARGUMENTS é um caminho de arquivo:
89
+ → Ler o arquivo e extrair os cenários listados
90
+ → Cada cenário vira um describe/it separado no teste
91
+ ```
92
+
93
+ ---
94
+
95
+ ## Padrões Críticos
96
+
97
+ ### Padrão 1: Linguagem natural → estrutura de teste
98
+
99
+ Cada cenário descrito pelo QA deve virar um `it()` com steps claros:
100
+
101
+ ```typescript
102
+ // QA descreveu: "usuário faz login com credenciais válidas e vê o dashboard"
103
+ it("deve fazer login e exibir o dashboard", async () => {
104
+ // Arrange
105
+ await page.goto(process.env.APP_URL!);
106
+
107
+ // Act — linguagem natural, resiliente a mudanças de UI
108
+ await stagehand.act("preencha o campo de email com o usuário de teste");
109
+ await stagehand.act("preencha o campo de senha com a senha de teste");
110
+ await stagehand.act("clique no botão de entrar");
111
+
112
+ // Assert — extract() para validar o estado da página
113
+ const dashboard = await stagehand.extract(
114
+ "verifique se o dashboard do usuário está visível com seus dados",
115
+ z.object({
116
+ visible: z.boolean(),
117
+ userName: z.string().optional(),
118
+ })
119
+ );
120
+ expect(dashboard.visible).toBe(true);
121
+ });
122
+ ```
123
+
124
+ ### Padrão 2: Separar execução de asserção
125
+
126
+ Sempre separar o `act()` (executar) do `extract()` (validar):
127
+
128
+ ```typescript
129
+ // Executar a ação
130
+ await stagehand.act("clique no botão de confirmar pedido");
131
+
132
+ // Aguardar estado estável
133
+ await page.waitForLoadState("networkidle");
134
+
135
+ // Validar resultado com extract() + Zod
136
+ const resultado = await stagehand.extract(
137
+ "qual é o status do pedido exibido na tela?",
138
+ z.object({
139
+ status: z.enum(["confirmado", "pendente", "erro"]),
140
+ numeroPedido: z.string().optional(),
141
+ })
142
+ );
143
+ expect(resultado.status).toBe("confirmado");
144
+ ```
145
+
146
+ ### Padrão 3: Usar observe() para diagnóstico em falhas
147
+
148
+ Quando um teste falha, `observe()` ajuda a entender o estado atual da página:
149
+
150
+ ```typescript
151
+ // Diagnóstico — útil em desenvolvimento do teste
152
+ const elementosDisponiveis = await stagehand.observe(
153
+ "quais botões e links estão disponíveis nesta página?"
154
+ );
155
+ console.log("Estado atual:", elementosDisponiveis);
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Estrutura do Arquivo de Teste
161
+
162
+ ```typescript
163
+ import "dotenv/config";
164
+ import { Stagehand } from "@browserbasehq/stagehand";
165
+ import { z } from "zod";
166
+ import { expect } from "@playwright/test";
167
+
168
+ // ──────────────────────────────────────────────────────
169
+ // Cenário: {nome do cenário descrito pelo QA}
170
+ // Autor: QA - gerado via qa-e2e skill
171
+ // ──────────────────────────────────────────────────────
172
+
173
+ describe("{Funcionalidade}", () => {
174
+ let stagehand: Stagehand;
175
+ let page: any;
176
+
177
+ beforeEach(async () => {
178
+ stagehand = new Stagehand({
179
+ env: "LOCAL", // trocar por "BROWSERBASE" para execução em nuvem
180
+ verbose: 0, // 0 = silencioso, 1 = básico, 2 = detalhado
181
+ });
182
+ await stagehand.init();
183
+ page = stagehand.context.pages()[0];
184
+ });
185
+
186
+ afterEach(async () => {
187
+ await stagehand.close();
188
+ });
189
+
190
+ it("{descrição do cenário 1}", async () => {
191
+ // Arrange
192
+ await page.goto(process.env.APP_URL!);
193
+
194
+ // Act
195
+ await stagehand.act("{passo 1 em linguagem natural}");
196
+ await stagehand.act("{passo 2 em linguagem natural}");
197
+
198
+ // Assert
199
+ const resultado = await stagehand.extract(
200
+ "{o que validar}",
201
+ z.object({ {campo}: z.{tipo}() })
202
+ );
203
+ expect(resultado.{campo}).toBe({valor esperado});
204
+ });
205
+
206
+ it("{descrição do cenário 2}", async () => {
207
+ // ...
208
+ });
209
+ });
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Fluxo de Trabalho
215
+
216
+ ### 1. Coletar cenários do QA
217
+
218
+ Se `$ARGUMENTS` não contém cenários suficientes, perguntar:
219
+
220
+ ```
221
+ Descreva os cenários de teste. Para cada cenário, informe:
222
+ 1. Pré-condição (o que precisa estar pronto antes)
223
+ 2. Passo a passo da ação do usuário
224
+ 3. O que deve acontecer (critério de aceitação)
225
+
226
+ Exemplo:
227
+ ─ Cenário: Checkout com cartão válido
228
+ Pré-condição: usuário logado com produto no carrinho
229
+ Passos: ir para o carrinho → finalizar compra → preencher dados do cartão → confirmar
230
+ Resultado esperado: página de confirmação com número do pedido
231
+ ```
232
+
233
+ ### 2. Estruturar cenários em describes/its
234
+
235
+ Agrupar por funcionalidade:
236
+ - 1 `describe` por funcionalidade (ex: "Checkout", "Login", "Dashboard")
237
+ - 1 `it` por cenário/caminho de usuário
238
+
239
+ ### 3. Gerar arquivo de teste Stagehand
240
+
241
+ Criar `tests/e2e/{funcionalidade}.spec.ts` seguindo o template da seção acima.
242
+
243
+ ### 4. Executar e validar
244
+
245
+ ```bash
246
+ # Rodar com tsx (desenvolvimento)
247
+ npx tsx tests/e2e/{funcionalidade}.spec.ts
248
+
249
+ # Rodar com Playwright test runner
250
+ npx playwright test tests/e2e/{funcionalidade}.spec.ts
251
+
252
+ # Rodar com verbose para debug
253
+ STAGEHAND_VERBOSE=2 npx playwright test tests/e2e/{funcionalidade}.spec.ts
254
+ ```
255
+
256
+ ### 5. Exportar para Cypress (quando solicitado)
257
+
258
+ Se o projeto usa Cypress em CI/CD, converter o teste gerado:
259
+
260
+ #### Processo de conversão Stagehand → Cypress
261
+
262
+ **Regra**: Usar `observe()` do Stagehand para descobrir os seletores reais, depois substituir por comandos Cypress determinísticos.
263
+
264
+ ```bash
265
+ # 1. Rodar o teste Stagehand com verbose para coletar seletores
266
+ STAGEHAND_VERBOSE=2 npx tsx tests/e2e/{funcionalidade}.spec.ts 2>&1 | grep "selector"
267
+ ```
268
+
269
+ Gerar `cypress/e2e/{funcionalidade}.cy.ts`:
270
+
271
+ ```typescript
272
+ // Cypress — gerado a partir de teste Stagehand
273
+ // Seletores descobertos via Stagehand observe() em {data}
274
+
275
+ describe("{Funcionalidade}", () => {
276
+ beforeEach(() => {
277
+ cy.visit(Cypress.env("APP_URL"));
278
+ });
279
+
280
+ it("{descrição do cenário}", () => {
281
+ // Passo 1: {descrição original do QA}
282
+ cy.get("{seletor-descoberto-stagehand}").type("{valor}");
283
+
284
+ // Passo 2: {descrição}
285
+ cy.contains("button", "{texto-do-botão}").click();
286
+
287
+ // Assert
288
+ cy.get("{seletor-resultado}").should("contain.text", "{valor esperado}");
289
+ });
290
+ });
291
+ ```
292
+
293
+ ---
294
+
295
+ ## Árvore de Decisão
296
+
297
+ ```
298
+ Projeto tem CI/CD com Cypress? → Gerar Stagehand + exportar para Cypress
299
+ Apenas ambiente de desenvolvimento? → Gerar só Stagehand (mais rápido de manter)
300
+ QA quer manter testes sem seletores? → Manter Stagehand (resiliente a redesign)
301
+ Cenário envolve upload de arquivo? → Usar page.setInputFiles() após act()
302
+ Cenário precisa de usuário autenticado? → Usar storageState para reaproveitar sessão
303
+ Site tem muitos redirects/popups? → Adicionar waitForLoadState() entre passos
304
+ ```
305
+
306
+ ---
307
+
308
+ ## Regras
309
+
310
+ ### Nunca
311
+ - Hardcodar URLs, emails, senhas ou dados de teste no arquivo de teste — usar `.env`
312
+ - Usar `observe()` em produção para encontrar elementos — apenas para diagnóstico/dev
313
+ - Criar testes sem asserção (`act()` sem `extract()` de validação)
314
+ - Misturar lógica de negócio com lógica de teste
315
+ - Deixar `verbose: 2` ativo em testes de CI — gera muito ruído nos logs
316
+
317
+ ### Sempre
318
+ - Um `describe` por funcionalidade, um `it` por cenário
319
+ - `beforeEach`/`afterEach` para setup e teardown do Stagehand
320
+ - Validar resultados com `extract()` + Zod schema tipado
321
+ - Comentar o cenário original do QA acima de cada `it`
322
+ - Usar variáveis de ambiente para dados sensíveis e URL base
323
+ - Adicionar `waitForLoadState("networkidle")` após navegações longas
324
+
325
+ ---
326
+
327
+ ## Tratamento de Erros
328
+
329
+ ### act() não encontra o elemento
330
+ - Reformular a instrução — ser mais específico: "clique no botão azul 'Enviar' no formulário de cadastro"
331
+ - Usar `observe()` para ver o que está disponível: `stagehand.observe("quais botões existem aqui?")`
332
+ - Verificar se a página carregou: adicionar `waitForLoadState` antes do `act()`
333
+
334
+ ### extract() retorna dados inesperados
335
+ - Revisar o Zod schema — tipos podem estar incorretos
336
+ - Tornar a pergunta mais específica para o LLM
337
+ - Verificar se o conteúdo está visível (não oculto por CSS)
338
+
339
+ ### Teste não reproduzível (passa às vezes, falha outras)
340
+ - Adicionar `waitForLoadState("networkidle")` após ações que disparam navegação
341
+ - Aumentar timeout: `stagehand.act("...", { timeout: 15_000 })`
342
+ - Verificar se o dado de teste muda entre execuções
343
+
344
+ ### Exportação Cypress com seletores frágeis
345
+ - Preferir `cy.contains()`, `cy.getByRole()` sobre seletores XPath absolutos
346
+ - Verificar se o app tem `data-testid` — mais estável que classes CSS
347
+ - Combinar seletor semântico + fallback: `cy.get('[data-testid="btn-submit"]').or('button:contains("Enviar")')`
348
+
349
+ ---
350
+
351
+ ## Checklist de Conclusão
352
+
353
+ - [ ] Cenários coletados e estruturados (describe/it)
354
+ - [ ] Arquivo `tests/e2e/{funcionalidade}.spec.ts` criado
355
+ - [ ] `beforeEach`/`afterEach` com init/close do Stagehand
356
+ - [ ] Dados sensíveis em variáveis de ambiente
357
+ - [ ] Cada `it` tem asserção via `extract()` + Zod
358
+ - [ ] Cenário original do QA comentado acima de cada `it`
359
+ - [ ] Teste executado e passando localmente
360
+ - [ ] Se solicitado: `cypress/e2e/{funcionalidade}.cy.ts` gerado com seletores descobertos
361
+
362
+ ---
363
+
364
+ ## Output
365
+
366
+ | Artefato | Descrição |
367
+ |----------|-----------|
368
+ | `tests/e2e/{funcionalidade}.spec.ts` | Teste Stagehand com linguagem natural — principal entregável |
369
+ | `cypress/e2e/{funcionalidade}.cy.ts` | Exportação Cypress com seletores reais (opcional, para CI/CD) |
370
+
371
+ ---
372
+
373
+ ## Mensagem de Conclusão
374
+
375
+ ```
376
+ Testes E2E gerados!
377
+
378
+ Funcionalidade: {nome}
379
+ Cenários cobertos: {N}
380
+ Engine: Stagehand (linguagem natural, resiliente a mudanças de UI)
381
+
382
+ Arquivos:
383
+ - tests/e2e/{funcionalidade}.spec.ts ← teste principal
384
+
385
+ {se exportação Cypress solicitada:}
386
+ - cypress/e2e/{funcionalidade}.cy.ts ← versão Cypress para CI/CD
387
+
388
+ Para rodar:
389
+ npx playwright test tests/e2e/{funcionalidade}.spec.ts
390
+
391
+ Próximo passo: revisar os cenários e adicionar dados de teste no .env
392
+ ```
393
+
394
+ ---
395
+
396
+ ## Recursos Adicionais
397
+
398
+ - **Stagehand docs**: https://docs.stagehand.dev
399
+ - **Skill relacionado**: `$IDE/skills/qa-testsprite/SKILL.md` — para testes unitários/integração com TestSprite
400
+ - **Skill relacionado**: `$IDE/skills/eng-scraper-robot-builder/SKILL.md` — para gerar robôs Playwright