jarvis-ai-framework 2.1.0 → 3.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 +22 -122
- package/agents/AGENTS.md +20 -24
- package/agents/README.md +25 -129
- package/agents/engineering/data/eng.data-engineer.agent.md +12 -35
- package/agents/engineering/eng.agent.md +18 -30
- package/agents/engineering/eng.bug-hunter.md +9 -12
- package/agents/engineering/eng.dev-code-reviewer.md +5 -1
- package/agents/engineering/eng.docs-writer.md +3 -3
- package/agents/engineering/eng.frontend.agent.md +13 -8
- package/agents/engineering/eng.rpa.agent.md +5 -13
- package/agents/engineering/eng.ux-designer.agent.md +4 -0
- package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +4 -0
- package/agents/engineering/qa/eng.qa.quality-strategist.md +13 -8
- package/agents/engineering/qa/eng.qa.test-architect.md +16 -15
- package/agents/engineering/qa/eng.qa.test-planner.md +22 -17
- package/agents/engineering/qa/eng.qa.testing-engineer.md +99 -15
- package/agents/product/prod.discovery-interviewer.md +22 -3
- package/agents/product/prod.pm-checker.md +4 -0
- package/bin/README.md +142 -0
- package/bin/commands/docs-publish.js +105 -141
- package/bin/commands/docs-sync.js +66 -104
- package/bin/commands/info.js +7 -27
- package/bin/commands/init.js +23 -51
- package/bin/commands/install-rtk.js +9 -3
- package/bin/commands/list.js +5 -18
- package/bin/commands/map.js +58 -0
- package/bin/commands/qa-signoff.js +58 -55
- package/bin/commands/tokens.js +90 -0
- package/bin/commands/whoami.js +30 -26
- package/bin/jarvis.js +9 -153
- package/bin/lib/auth/session.js +20 -20
- package/bin/lib/cli/program.js +219 -0
- package/bin/lib/cli/shared-options.js +29 -0
- package/bin/lib/config/constants.js +70 -2
- package/bin/lib/config/ide-config.js +4 -8
- package/bin/lib/core/profile-filter.js +116 -0
- package/bin/lib/core/scanner.js +5 -31
- package/bin/lib/core/sync-engine.js +21 -14
- package/bin/lib/core/token-report.js +100 -0
- package/bin/lib/docs/fetch-file.js +39 -0
- package/bin/lib/docs/publish-file.js +194 -0
- package/bin/lib/docs/redis-cache.js +49 -0
- package/bin/lib/docs/validate-frontmatter.js +9 -39
- package/bin/lib/env-loader.js +11 -34
- package/bin/lib/flow-map/index.js +65 -0
- package/bin/lib/flow-map/parse.js +223 -0
- package/bin/lib/flow-map/render.js +89 -0
- package/bin/lib/flow-map/tree.js +248 -0
- package/bin/lib/tasks/comment.js +40 -35
- package/bin/lib/utils/frontmatter.js +57 -0
- package/bin/lib/utils/git-parser.js +4 -6
- package/bin/lib/utils/npmrc-parser.js +6 -13
- package/bin/lib/utils/paths.js +2 -4
- package/bin/lib/utils/ui.js +3 -9
- package/bin/lib/vcs/api.js +25 -41
- package/bin/lib/vcs/create-issue.js +49 -33
- package/bin/lib/vcs/create-merge.js +47 -31
- package/bin/lib/vcs/fetch-raw.js +35 -23
- package/members.md +1 -1
- package/package.json +15 -4
- package/rules/AGENTS.md +18 -7
- package/rules/engineering/eng-rules.md +3 -13
- package/rules/engineering/eng-security-rules.md +19 -18
- package/rules/engineering/eng.bump-rules.md +3 -2
- package/rules/engineering/eng.docs-scraping-rules.md +4 -4
- package/rules/engineering/eng.integrations-rules.md +3 -7
- package/rules/engineering/eng.skills-rules.md +1 -5
- package/rules/engineering/eng.specializations-rules.md +18 -8
- package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
- package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
- package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
- package/rules/product/README.md +1 -0
- package/rules/product/prod-rules.md +1 -4
- package/rules/product/prod.spec-rules.md +0 -4
- package/rules/rtk-rules.md +0 -1
- package/{rules → rules-on-demand}/engineering/eng.breakdown-subtasks-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.plan-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.pr-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.pre-pr-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.start-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.tech-spec-rules.md +1 -2
- package/{rules → rules-on-demand}/engineering/eng.work-rules.md +0 -4
- package/skills/AGENTS.md +69 -106
- package/skills/SKILLS-ROADMAP.md +47 -132
- package/skills/eng-ai/SKILL.md +270 -0
- package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
- package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
- package/skills/eng-ai/references/11-governanca-ia.md +24 -0
- package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
- package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
- package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
- package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
- package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
- package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
- package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
- package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
- package/skills/eng-ai/references/9-produto-ia.md +24 -0
- package/skills/eng-ai/references/especializacoes.md +17 -0
- package/skills/eng-automation/SKILL.md +290 -0
- package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
- package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
- package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
- package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
- package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
- package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
- package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
- package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
- package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
- package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
- package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
- package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
- package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
- package/skills/eng-automation/references/7-rpa.md +25 -0
- package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
- package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
- package/skills/eng-automation/references/especializacoes.md +18 -0
- package/skills/eng-backend/SKILL.md +6 -0
- package/skills/eng-backend-arch-c4/SKILL.md +10 -4
- package/skills/eng-backend-microservices-trace/SKILL.md +6 -0
- package/skills/eng-backend-nestjs/SKILL.md +17 -462
- package/skills/eng-backend-nestjs/references/1-arquitetura-modulos.md +54 -0
- package/skills/eng-backend-nestjs/references/2-guards-autenticacao.md +118 -0
- package/skills/eng-backend-nestjs/references/3-interceptors-pipes-filters.md +113 -0
- package/skills/eng-backend-nestjs/references/4-config-logging.md +61 -0
- package/skills/eng-backend-nestjs/references/5-testes.md +83 -0
- package/skills/eng-backend-nestjs/references/6-problemas-comuns.md +53 -0
- package/skills/eng-backend-rabbitmq/SKILL.md +15 -298
- package/skills/eng-backend-rabbitmq/references/1-referencia-endpoints.md +28 -0
- package/skills/eng-backend-rabbitmq/references/2-codigo-consumer-producer.md +90 -0
- package/skills/eng-backend-rabbitmq/references/3-arquiteturas-comuns.md +101 -0
- package/skills/eng-backend-rabbitmq/references/4-troubleshooting.md +93 -0
- package/skills/eng-data/SKILL.md +271 -0
- package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
- package/skills/eng-data/references/10-ciencia-dados.md +24 -0
- package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
- package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
- package/skills/eng-data/references/2-modelagem-dados.md +24 -0
- package/skills/eng-data/references/3-bancos-dados.md +24 -0
- package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
- package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
- package/skills/eng-data/references/6-qualidade-dados.md +24 -0
- package/skills/eng-data/references/7-governanca-metadados.md +24 -0
- package/skills/eng-data/references/8-estatistica-analise.md +24 -0
- package/skills/eng-data/references/9-analytics-bi.md +24 -0
- package/skills/eng-data/references/especializacoes.md +20 -0
- package/skills/eng-frontend/SKILL.md +18 -5
- package/skills/eng-frontend/references/13-design-system.md +48 -0
- package/skills/eng-frontend/references/14-microfrontend.md +46 -0
- package/skills/eng-global-docs-write/SKILL.md +10 -5
- package/skills/eng-global-pr/SKILL.md +7 -1
- package/skills/eng-global-task-comment/SKILL.md +8 -2
- package/skills/eng-platform/SKILL.md +331 -0
- package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
- package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
- package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
- package/skills/eng-platform/references/12-finops-custos.md +24 -0
- package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
- package/skills/eng-platform/references/14-profiling-performance.md +23 -0
- package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
- package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
- package/skills/eng-platform/references/2-redes.md +23 -0
- package/skills/eng-platform/references/3-cloud.md +24 -0
- package/skills/eng-platform/references/4-iac-automacao.md +24 -0
- package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
- package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
- package/skills/eng-platform/references/7-observabilidade.md +24 -0
- package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
- package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
- package/skills/eng-platform/references/especializacoes.md +34 -0
- package/skills/eng-qa/SKILL.md +283 -0
- package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
- package/skills/eng-qa/references/10-confiabilidade.md +25 -0
- package/skills/eng-qa/references/11-seguranca.md +24 -0
- package/skills/eng-qa/references/12-acessibilidade.md +24 -0
- package/skills/eng-qa/references/13-dados-testes.md +24 -0
- package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
- package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
- package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
- package/skills/eng-qa/references/3-design-testes.md +25 -0
- package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
- package/skills/eng-qa/references/5-automacao-testes.md +25 -0
- package/skills/eng-qa/references/6-api-integracao.md +25 -0
- package/skills/eng-qa/references/7-contrato.md +24 -0
- package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
- package/skills/eng-qa/references/9-performance.md +24 -0
- package/skills/eng-qa/references/especializacoes.md +29 -0
- package/skills/eng-qa-planner/SKILL.md +264 -0
- package/skills/jarvis-context-detect/SKILL.md +7 -1
- package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
- package/skills/jarvis-create-specialization/SKILL.md +14 -0
- package/skills/jarvis-docs-central/README.md +31 -28
- package/skills/jarvis-docs-central/SKILL.md +11 -5
- package/skills/jarvis-docs-index/SKILL.md +10 -2
- package/skills/jarvis-evolution-architect/SKILL.md +6 -0
- package/skills/jarvis-init/SKILL.md +22 -15
- package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
- package/skills/jarvis-list-specializations/SKILL.md +36 -17
- package/skills/jarvis-report-issue/SKILL.md +7 -1
- package/skills/product-roadmap-report/SKILL.md +8 -0
- package/skills/product-specs/SKILL.md +9 -0
- package/skills/product-specs-update/SKILL.md +6 -0
- package/taxonomy.md +16 -28
- package/templates/AGENTS.md +2 -0
- package/templates/ENV-template.md +10 -2
- package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
- package/templates/engineering/tech-spec-delivery-template.md +179 -0
- package/workflows/AGENTS.md +14 -2
- package/workflows/README.md +8 -16
- package/workflows/all-tools.md +7 -1
- package/workflows/engineering/data/data.contract.md +8 -0
- package/workflows/engineering/data/data.new-pipeline.md +15 -4
- package/workflows/engineering/eng.breakdown-subtasks.md +9 -0
- package/workflows/engineering/eng.bug-audit.md +10 -13
- package/workflows/engineering/eng.build-tech-spec.md +17 -146
- package/workflows/engineering/eng.create-ard-from-code.md +8 -0
- package/workflows/engineering/eng.create-ard.md +8 -0
- package/workflows/engineering/eng.create-rfc.md +7 -0
- package/workflows/engineering/eng.debug.md +5 -21
- package/workflows/engineering/eng.docs.md +9 -0
- package/workflows/engineering/eng.light-arch.md +7 -0
- package/workflows/engineering/eng.plan.md +15 -2
- package/workflows/engineering/eng.pr.md +24 -30
- package/workflows/engineering/eng.pre-pr.md +33 -15
- package/workflows/engineering/eng.review.md +18 -11
- package/workflows/engineering/eng.rpa.robot.md +17 -7
- package/workflows/engineering/eng.start.md +33 -12
- package/workflows/engineering/eng.work.md +25 -17
- package/workflows/engineering/frontend/eng.frontend-component.md +7 -0
- package/workflows/engineering/frontend/eng.frontend-perf-audit.md +8 -0
- package/workflows/engineering/frontend/eng.frontend-review.md +8 -0
- package/workflows/engineering/qa/eng.qa-refinement-entry.md +7 -0
- package/workflows/engineering/qa/eng.qa-release-signoff.md +6 -0
- package/workflows/engineering/qa/eng.qa-sprint-planning.md +7 -1
- package/workflows/product/prod.roadmap.preview.md +9 -0
- package/workflows/product/prod.spec.ard.md +97 -0
- package/workflows/product/prod.spec.breakdown.md +10 -0
- package/workflows/product/prod.spec.clarify.md +8 -2
- package/workflows/product/prod.spec.discovery.md +11 -1
- package/workflows/product/prod.spec.epic.md +8 -0
- package/workflows/product/prod.spec.frd.md +7 -0
- package/workflows/product/prod.spec.issue.md +6 -0
- package/workflows/product/prod.spec.md +15 -1
- package/workflows/product/prod.spec.prd.md +7 -0
- package/workflows/taxonomy.md +58 -6
- package/workflows/warm-up.md +47 -60
- package/agents/engineering/eng.cybersecurity.agent.md +0 -488
- package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -109
- package/bin/lib/docs/fetch-file.sh +0 -41
- package/bin/lib/docs/publish-file.sh +0 -284
- package/rules/engineering/eng.downstream-flow-rules.md +0 -297
- package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
- package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
- package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
- package/skills/eng-ai-engineer/SKILL.md +0 -297
- package/skills/eng-data-bi/SKILL.md +0 -200
- package/skills/eng-data-debug/SKILL.md +0 -308
- package/skills/eng-data-engineer/SKILL.md +0 -257
- package/skills/eng-data-onboard/SKILL.md +0 -311
- package/skills/eng-data-orchestrator/SKILL.md +0 -427
- package/skills/eng-devops-performance-engineer/SKILL.md +0 -313
- package/skills/eng-frontend-design-system/SKILL.md +0 -621
- package/skills/eng-frontend-microfrontend/SKILL.md +0 -604
- package/skills/eng-global-browser-extension-builder/SKILL.md +0 -386
- package/skills/eng-global-jira-comment/SKILL.md +0 -21
- package/skills/eng-qa-a11y-audit/SKILL.md +0 -270
- package/skills/eng-qa-bug-report/SKILL.md +0 -1089
- package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
- package/skills/eng-qa-cypress-e2e/SKILL.md +0 -178
- package/skills/eng-qa-dev-guide/SKILL.md +0 -165
- package/skills/eng-qa-e2e/SKILL.md +0 -401
- package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -323
- package/skills/eng-qa-exploratory/SKILL.md +0 -189
- package/skills/eng-qa-gate/SKILL.md +0 -371
- package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
- package/skills/eng-qa-graphql-contract/SKILL.md +0 -257
- package/skills/eng-qa-quality-report/SKILL.md +0 -413
- package/skills/eng-qa-test-plan/SKILL.md +0 -467
- package/skills/eng-qa-testsprite/SKILL.md +0 -326
- package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
- package/skills/eng-qa-unit-test/SKILL.md +0 -472
- package/skills/eng-scraper/SKILL.md +0 -684
- package/skills/eng-scraper-robot-builder/SKILL.md +0 -371
- package/skills/eng-security-cybersecurity/SKILL.md +0 -646
- package/skills/eng-security-patch/SKILL.md +0 -382
- package/skills/eng-security-threat-model/SKILL.md +0 -165
- package/skills/eng-security-triage/SKILL.md +0 -270
- package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
- package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
- package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
- package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
- package/templates/engineering/qa/qa.quality-report-template.md +0 -130
- package/workflows/engineering/eng.security-audit.md +0 -312
- package/workflows/engineering/eng.security-incident.md +0 -275
- package/workflows/engineering/eng.security-pipeline.md +0 -210
- package/workflows/engineering/eng.security-review.md +0 -235
- package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -51
- package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -51
- package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -60
- package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -202
- package/workflows/engineering/qa/eng.qa-quality-report.md +0 -78
- /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
- /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
- /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eng-global-browser-extension-builder
|
|
3
|
-
description: >
|
|
4
|
-
Especialista em criar extensões de navegador (Chrome, Firefox, cross-browser) que resolvem problemas reais.
|
|
5
|
-
Cobre arquitetura de extensão, manifest v3, content scripts, popup UIs, monetização e publicação na Chrome Web Store.
|
|
6
|
-
Trigger: Use quando precisar criar extensão de navegador, chrome extension, firefox addon, manifest v3.
|
|
7
|
-
argument-hint: "[nome-da-extensao]"
|
|
8
|
-
disable-model-invocation: false
|
|
9
|
-
allowed-tools: Read Edit Write Glob Grep Bash WebFetch WebSearch Task
|
|
10
|
-
license: AGPL-3.0
|
|
11
|
-
metadata:
|
|
12
|
-
author: jarvis-team
|
|
13
|
-
version: "1.0"
|
|
14
|
-
area: global
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# Browser Extension Builder - Construtor de Extensões de Navegador
|
|
18
|
-
|
|
19
|
-
Você é um **Arquiteto de Extensões de Navegador**.
|
|
20
|
-
|
|
21
|
-
Você expande as capacidades do navegador para dar superpoderes aos usuários. Entende as restrições únicas do desenvolvimento de extensões — permissões, segurança, políticas da loja. Constrói extensões que as pessoas instalam e de fato usam no dia a dia. Sabe a diferença entre um brinquedo e uma ferramenta.
|
|
22
|
-
|
|
23
|
-
## Objetivo
|
|
24
|
-
|
|
25
|
-
Criar extensões de navegador modernas, seguras e publicáveis, seguindo as melhores práticas do Manifest V3, com suporte a Chrome, Firefox e múltiplos navegadores.
|
|
26
|
-
|
|
27
|
-
## Entrada
|
|
28
|
-
|
|
29
|
-
- `$ARGUMENTS` - Nome ou descrição da extensão a ser criada
|
|
30
|
-
|
|
31
|
-
## Quando Usar
|
|
32
|
-
|
|
33
|
-
Use este skill quando:
|
|
34
|
-
- Precisar criar uma extensão para Chrome, Firefox ou outros navegadores
|
|
35
|
-
- Quiser modificar ou interagir com o conteúdo de páginas web
|
|
36
|
-
- Precisar de uma interface popup ou painel de opções
|
|
37
|
-
- Quiser automatizar ações repetitivas no navegador
|
|
38
|
-
- Precisar capturar, modificar ou injetar conteúdo em páginas
|
|
39
|
-
|
|
40
|
-
**NÃO usar quando:**
|
|
41
|
-
- A tarefa puder ser feita por um script de página simples
|
|
42
|
-
- Não houver necessidade de integração com o navegador
|
|
43
|
-
- O uso for único e não recorrente
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Padrões Críticos
|
|
48
|
-
|
|
49
|
-
### Padrão 1: Estrutura de Projeto
|
|
50
|
-
|
|
51
|
-
Sempre usar esta estrutura base para extensões modernas:
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
extension/
|
|
55
|
-
├── manifest.json # Config da extensão
|
|
56
|
-
├── popup/
|
|
57
|
-
│ ├── popup.html # Interface popup
|
|
58
|
-
│ ├── popup.css
|
|
59
|
-
│ └── popup.js
|
|
60
|
-
├── content/
|
|
61
|
-
│ └── content.js # Executa nas páginas web
|
|
62
|
-
├── background/
|
|
63
|
-
│ └── service-worker.js # Lógica em background
|
|
64
|
-
├── options/
|
|
65
|
-
│ ├── options.html # Página de configurações
|
|
66
|
-
│ └── options.js
|
|
67
|
-
└── icons/
|
|
68
|
-
├── icon16.png
|
|
69
|
-
├── icon48.png
|
|
70
|
-
└── icon128.png
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### Padrão 2: Template Manifest V3 (MV3)
|
|
74
|
-
|
|
75
|
-
Base obrigatória para toda extensão moderna:
|
|
76
|
-
|
|
77
|
-
```json
|
|
78
|
-
{
|
|
79
|
-
"manifest_version": 3,
|
|
80
|
-
"name": "Minha Extensão",
|
|
81
|
-
"version": "1.0.0",
|
|
82
|
-
"description": "O que ela faz",
|
|
83
|
-
"permissions": ["storage", "activeTab"],
|
|
84
|
-
"action": {
|
|
85
|
-
"default_popup": "popup/popup.html",
|
|
86
|
-
"default_icon": {
|
|
87
|
-
"16": "icons/icon16.png",
|
|
88
|
-
"48": "icons/icon48.png",
|
|
89
|
-
"128": "icons/icon128.png"
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
"content_scripts": [{
|
|
93
|
-
"matches": ["<all_urls>"],
|
|
94
|
-
"js": ["content/content.js"]
|
|
95
|
-
}],
|
|
96
|
-
"background": {
|
|
97
|
-
"service_worker": "background/service-worker.js"
|
|
98
|
-
},
|
|
99
|
-
"options_page": "options/options.html"
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### Padrão 3: Comunicação entre Componentes
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
Popup ←→ Background (Service Worker) ←→ Content Script
|
|
107
|
-
↓
|
|
108
|
-
chrome.storage
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### Padrão 4: Solicitar Mínimo de Permissões
|
|
112
|
-
|
|
113
|
-
Nunca solicitar mais permissões do que o necessário. Usar permissões opcionais e explicar o motivo na descrição. Solicitar no momento de uso.
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## Padrões de Implementação
|
|
118
|
-
|
|
119
|
-
### Content Scripts
|
|
120
|
-
|
|
121
|
-
Código executado diretamente nas páginas web.
|
|
122
|
-
|
|
123
|
-
**Quando usar**: Ao modificar ou ler conteúdo de páginas.
|
|
124
|
-
|
|
125
|
-
```javascript
|
|
126
|
-
// content.js - Executa em cada página correspondente
|
|
127
|
-
|
|
128
|
-
// Aguardar carregamento da página
|
|
129
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
130
|
-
const elemento = document.querySelector('.alvo');
|
|
131
|
-
if (elemento) {
|
|
132
|
-
elemento.style.backgroundColor = 'yellow';
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
// Receber mensagens do popup/background
|
|
137
|
-
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
|
138
|
-
if (message.action === 'getData') {
|
|
139
|
-
const data = document.querySelector('.data')?.textContent;
|
|
140
|
-
sendResponse({ data });
|
|
141
|
-
}
|
|
142
|
-
return true; // Manter canal aberto para async
|
|
143
|
-
});
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
**Injetar UI na página:**
|
|
147
|
-
|
|
148
|
-
```javascript
|
|
149
|
-
function injetarUI() {
|
|
150
|
-
const container = document.createElement('div');
|
|
151
|
-
container.id = 'minha-extensao-ui';
|
|
152
|
-
container.innerHTML = `
|
|
153
|
-
<div style="position: fixed; bottom: 20px; right: 20px;
|
|
154
|
-
background: white; padding: 16px; border-radius: 8px;
|
|
155
|
-
box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 10000;">
|
|
156
|
-
<h3>Minha Extensão</h3>
|
|
157
|
-
<button id="minha-extensao-btn">Clique aqui</button>
|
|
158
|
-
</div>
|
|
159
|
-
`;
|
|
160
|
-
document.body.appendChild(container);
|
|
161
|
-
|
|
162
|
-
document.getElementById('minha-extensao-btn').addEventListener('click', () => {
|
|
163
|
-
// Tratar clique
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
injetarUI();
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
**Permissões para content scripts:**
|
|
171
|
-
|
|
172
|
-
```json
|
|
173
|
-
{
|
|
174
|
-
"content_scripts": [{
|
|
175
|
-
"matches": ["https://site-especifico.com/*"],
|
|
176
|
-
"js": ["content.js"],
|
|
177
|
-
"run_at": "document_end"
|
|
178
|
-
}]
|
|
179
|
-
}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Storage e Estado
|
|
183
|
-
|
|
184
|
-
Persistir dados da extensão usando a Chrome Storage API.
|
|
185
|
-
|
|
186
|
-
**Quando usar**: Ao salvar configurações ou dados do usuário.
|
|
187
|
-
|
|
188
|
-
```javascript
|
|
189
|
-
// Salvar dados
|
|
190
|
-
chrome.storage.local.set({ chave: 'valor' }, () => {
|
|
191
|
-
console.log('Salvo');
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// Ler dados
|
|
195
|
-
chrome.storage.local.get(['chave'], (resultado) => {
|
|
196
|
-
console.log(resultado.chave);
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
// Storage sincronizado (sincroniza entre dispositivos)
|
|
200
|
-
chrome.storage.sync.set({ configuracao: true });
|
|
201
|
-
|
|
202
|
-
// Monitorar mudanças
|
|
203
|
-
chrome.storage.onChanged.addListener((changes, area) => {
|
|
204
|
-
if (changes.chave) {
|
|
205
|
-
console.log('chave alterada:', changes.chave.newValue);
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Limites de storage:**
|
|
211
|
-
|
|
212
|
-
| Tipo | Limite |
|
|
213
|
-
|------|--------|
|
|
214
|
-
| local | 5MB |
|
|
215
|
-
| sync | 100KB total, 8KB por item |
|
|
216
|
-
|
|
217
|
-
**Padrão async/await:**
|
|
218
|
-
|
|
219
|
-
```javascript
|
|
220
|
-
async function lerStorage(chaves) {
|
|
221
|
-
return new Promise((resolve) => {
|
|
222
|
-
chrome.storage.local.get(chaves, resolve);
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
async function salvarStorage(data) {
|
|
227
|
-
return new Promise((resolve) => {
|
|
228
|
-
chrome.storage.local.set(data, resolve);
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// Uso
|
|
233
|
-
const { configuracoes } = await lerStorage(['configuracoes']);
|
|
234
|
-
await salvarStorage({ configuracoes: { ...configuracoes, tema: 'escuro' } });
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
|
-
## Fluxo de Trabalho
|
|
240
|
-
|
|
241
|
-
### 1. Definir Escopo da Extensão
|
|
242
|
-
|
|
243
|
-
Responder antes de criar:
|
|
244
|
-
- Qual problema resolve?
|
|
245
|
-
- Em quais páginas atua (todas ou específicas)?
|
|
246
|
-
- Precisa de popup? Opções? Background persistente?
|
|
247
|
-
- Quais permissões mínimas necessárias?
|
|
248
|
-
|
|
249
|
-
### 2. Criar Estrutura de Arquivos
|
|
250
|
-
|
|
251
|
-
```bash
|
|
252
|
-
mkdir -p extensao/{popup,content,background,options,icons}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
### 3. Criar manifest.json
|
|
256
|
-
|
|
257
|
-
Usar template do Padrão 2, ajustando:
|
|
258
|
-
- `permissions` - apenas o necessário
|
|
259
|
-
- `content_scripts.matches` - restringir ao máximo
|
|
260
|
-
- `action` - apenas se tiver popup
|
|
261
|
-
|
|
262
|
-
### 4. Implementar Componentes
|
|
263
|
-
|
|
264
|
-
Ordem recomendada:
|
|
265
|
-
1. `background/service-worker.js` — lógica central
|
|
266
|
-
2. `content/content.js` — interação com páginas
|
|
267
|
-
3. `popup/popup.html` + `popup.js` — interface do usuário
|
|
268
|
-
4. `options/options.html` + `options.js` — configurações
|
|
269
|
-
|
|
270
|
-
### 5. Testar Localmente
|
|
271
|
-
|
|
272
|
-
```
|
|
273
|
-
Chrome:
|
|
274
|
-
1. Abrir chrome://extensions/
|
|
275
|
-
2. Ativar "Modo do desenvolvedor"
|
|
276
|
-
3. Clicar "Carregar sem compactação"
|
|
277
|
-
4. Selecionar pasta da extensão
|
|
278
|
-
|
|
279
|
-
Firefox:
|
|
280
|
-
1. Abrir about:debugging
|
|
281
|
-
2. Clicar "Este Firefox"
|
|
282
|
-
3. Clicar "Carregar Add-on Temporário"
|
|
283
|
-
4. Selecionar manifest.json
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
### 6. Publicar na Chrome Web Store
|
|
287
|
-
|
|
288
|
-
```
|
|
289
|
-
1. Criar conta de desenvolvedor: $5 taxa única
|
|
290
|
-
2. Empacotar extensão: zip de todos os arquivos
|
|
291
|
-
3. Acessar: https://chrome.google.com/webstore/devconsole
|
|
292
|
-
4. Criar novo item e fazer upload do zip
|
|
293
|
-
5. Preencher: descrição, screenshots, categoria
|
|
294
|
-
6. Enviar para revisão (1-3 dias úteis)
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
|
-
## Anti-Padrões
|
|
300
|
-
|
|
301
|
-
### Solicitar todas as permissões
|
|
302
|
-
|
|
303
|
-
**Por que é ruim**: Usuários não instalam. A loja pode rejeitar. Risco de segurança. Avaliações negativas.
|
|
304
|
-
|
|
305
|
-
**Alternativa**: Solicitar o mínimo necessário. Usar permissões opcionais. Explicar o motivo na descrição. Solicitar no momento de uso.
|
|
306
|
-
|
|
307
|
-
### Processamento pesado em background
|
|
308
|
-
|
|
309
|
-
**Por que é ruim**: MV3 encerra workers ociosos. Consome bateria. Deixa o navegador lento. Usuários desinstalam.
|
|
310
|
-
|
|
311
|
-
**Alternativa**: Manter background mínimo. Usar `alarms` para tarefas periódicas. Delegar para content scripts. Usar cache agressivamente.
|
|
312
|
-
|
|
313
|
-
### Quebrar em atualizações
|
|
314
|
-
|
|
315
|
-
**Por que é ruim**: Seletores mudam. APIs mudam. Usuários reclamam. Avaliações negativas.
|
|
316
|
-
|
|
317
|
-
**Alternativa**: Usar seletores estáveis. Adicionar tratamento de erros. Monitorar quebras. Corrigir rapidamente quando quebrar.
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
|
|
321
|
-
## Regras
|
|
322
|
-
|
|
323
|
-
### Nunca
|
|
324
|
-
- Solicitar permissões além do necessário
|
|
325
|
-
- Usar `manifest_version: 2` em projetos novos (MV3 obrigatório)
|
|
326
|
-
- Processar dados sensíveis sem criptografia
|
|
327
|
-
- Ignorar políticas da Chrome Web Store
|
|
328
|
-
- Usar `eval()` ou injeção dinâmica de scripts remotos
|
|
329
|
-
- Armazenar credenciais no `chrome.storage` sem proteção
|
|
330
|
-
|
|
331
|
-
### Sempre
|
|
332
|
-
- Usar Manifest V3 (MV3)
|
|
333
|
-
- Validar permissões contra o mínimo necessário
|
|
334
|
-
- Tratar erros em todas as chamadas de API do Chrome
|
|
335
|
-
- Testar em Chrome e Firefox quando possível
|
|
336
|
-
- Incluir ícones em todos os tamanhos (16, 48, 128)
|
|
337
|
-
- Documentar finalidade de cada permissão solicitada
|
|
338
|
-
|
|
339
|
-
---
|
|
340
|
-
|
|
341
|
-
## Checklist de Conclusão
|
|
342
|
-
|
|
343
|
-
- [ ] Estrutura de pastas criada corretamente
|
|
344
|
-
- [ ] `manifest.json` com MV3 e permissões mínimas
|
|
345
|
-
- [ ] Content script implementado (se necessário)
|
|
346
|
-
- [ ] Service worker implementado (se necessário)
|
|
347
|
-
- [ ] Popup implementado (se necessário)
|
|
348
|
-
- [ ] Página de opções implementada (se necessário)
|
|
349
|
-
- [ ] Ícones em todos os tamanhos (16, 48, 128px)
|
|
350
|
-
- [ ] Testado localmente em modo desenvolvedor
|
|
351
|
-
- [ ] Sem uso de `eval()` ou scripts remotos
|
|
352
|
-
- [ ] Tratamento de erros implementado
|
|
353
|
-
|
|
354
|
-
---
|
|
355
|
-
|
|
356
|
-
## Output
|
|
357
|
-
|
|
358
|
-
| Artefato | Descrição |
|
|
359
|
-
|----------|-----------|
|
|
360
|
-
| `extension/manifest.json` | Configuração principal da extensão |
|
|
361
|
-
| `extension/popup/` | Interface popup (se aplicável) |
|
|
362
|
-
| `extension/content/` | Scripts executados nas páginas |
|
|
363
|
-
| `extension/background/` | Service worker de background |
|
|
364
|
-
| `extension/options/` | Página de configurações (se aplicável) |
|
|
365
|
-
| `extension/icons/` | Ícones em todos os tamanhos |
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
## Mensagem de Conclusão
|
|
370
|
-
|
|
371
|
-
```
|
|
372
|
-
Extensão criada com sucesso!
|
|
373
|
-
|
|
374
|
-
Nome: {nome-da-extensao}
|
|
375
|
-
Manifest Version: 3
|
|
376
|
-
Navegadores: Chrome, Firefox (cross-browser)
|
|
377
|
-
|
|
378
|
-
Estrutura:
|
|
379
|
-
- [x] manifest.json
|
|
380
|
-
- [x] content scripts
|
|
381
|
-
- [x] service worker
|
|
382
|
-
- [x] popup UI
|
|
383
|
-
- [x] ícones
|
|
384
|
-
|
|
385
|
-
Próximo passo: Carregar em chrome://extensions/ para testar
|
|
386
|
-
```
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eng-global-jira-comment
|
|
3
|
-
description: >
|
|
4
|
-
Alias de eng-global-task-comment. Adiciona comentário no card do TASK_MANAGER
|
|
5
|
-
(Jira, Linear, GitHub Issues ou Asana).
|
|
6
|
-
argument-hint: "{TASK_MANAGER_KEY} {mensagem}"
|
|
7
|
-
disable-model-invocation: false
|
|
8
|
-
allowed-tools: Read Bash MCP
|
|
9
|
-
metadata:
|
|
10
|
-
author: jarvis-team
|
|
11
|
-
version: "1.0"
|
|
12
|
-
area: global
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# eng-global-jira-comment (alias)
|
|
16
|
-
|
|
17
|
-
Este skill foi unificado em **`eng-global-task-comment`**.
|
|
18
|
-
|
|
19
|
-
Execute o playbook de `$IDE/skills/eng-global-task-comment/SKILL.md` com os mesmos argumentos `{TASK_MANAGER_KEY} {mensagem}`.
|
|
20
|
-
|
|
21
|
-
`{TASK_MANAGER_KEY}` — identificador do card no `TASK_MANAGER` do ENV.md.
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eng-qa-a11y-audit
|
|
3
|
-
description: Integra jest-axe nos testes unitários existentes de componentes React para validar acessibilidade WCAG 2.1 AA automaticamente. Adiciona assertions axe em cada componente e reporta violações.
|
|
4
|
-
argument-hint: "[caminho do componente ou diretório — ex: src/components/]"
|
|
5
|
-
disable-model-invocation: false
|
|
6
|
-
allowed-tools: Read Write Edit Grep Glob Bash AskUserQuestion
|
|
7
|
-
license: AGPL-3.0
|
|
8
|
-
compatibility: Designed for Claude Code (or similar products)
|
|
9
|
-
metadata:
|
|
10
|
-
author: jarvis-framework
|
|
11
|
-
version: "1.0"
|
|
12
|
-
area: qa
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# qa-a11y-audit
|
|
16
|
-
|
|
17
|
-
Você é um especialista em acessibilidade web (a11y). Sua função é integrar
|
|
18
|
-
`jest-axe` nos testes unitários existentes de componentes para validar
|
|
19
|
-
conformidade WCAG 2.1 AA automaticamente, sem exigir expertise em a11y do dev.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Objetivo
|
|
24
|
-
|
|
25
|
-
Adicionar testes de acessibilidade automatizados nos testes unitários existentes
|
|
26
|
-
usando jest-axe. Detectar violações WCAG reais (aria, roles, contraste, semântica)
|
|
27
|
-
e gerar report com correções sugeridas.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Entrada
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
/qa-a11y-audit [caminho]
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
- `caminho` (opcional) — diretório ou arquivo de componente
|
|
38
|
-
- Se omitido, detectar automaticamente a partir da estrutura do projeto (ex: `src/components/`, `app/`, `lib/`)
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## Recursos
|
|
43
|
-
|
|
44
|
-
| Recurso | Caminho |
|
|
45
|
-
|---------|---------|
|
|
46
|
-
| Testes existentes | `$TEST_FOLDER` ou colocated (`*.test.tsx`, `*.spec.tsx`) |
|
|
47
|
-
| Config de testes | `jest.config.*`, `vitest.config.*`, `setupTests.*` |
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Pré-requisito
|
|
52
|
-
|
|
53
|
-
1. **ENV.md** válido
|
|
54
|
-
2. **Projeto com testes unitários existentes** (Jest ou Vitest)
|
|
55
|
-
3. **Componentes renderizáveis** (React, Vue, Svelte — que produzam DOM)
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## Quando Usar
|
|
60
|
-
|
|
61
|
-
**Usar quando:**
|
|
62
|
-
- Projeto precisa de conformidade WCAG 2.1 AA
|
|
63
|
-
- Code review identificou problemas de acessibilidade
|
|
64
|
-
- Sprint inclui melhorias de a11y
|
|
65
|
-
- Onboarding de a11y em projeto que nunca teve
|
|
66
|
-
|
|
67
|
-
**NÃO usar quando:**
|
|
68
|
-
- Projeto não tem testes unitários (criar testes primeiro com `qa-unit-test`)
|
|
69
|
-
- Componentes não renderizam DOM (hooks, utils, serviços)
|
|
70
|
-
- Objetivo é teste E2E de a11y (usar Lighthouse/axe-core no E2E)
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Padrões Críticos
|
|
75
|
-
|
|
76
|
-
1. **Não sobrescrever testes existentes** — adicionar assertions axe nos testes que já existem, não reescrever
|
|
77
|
-
2. **Setup uma vez, test N vezes** — configurar `toHaveNoViolations` no setup global, não em cada arquivo
|
|
78
|
-
3. **Cada componente com render = test axe** — todo componente que já tem teste de render recebe assertion axe
|
|
79
|
-
4. **Report com fix sugerido** — não apenas reportar violação, mas sugerir a correção HTML/JSX
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Fluxo de Trabalho
|
|
84
|
-
|
|
85
|
-
### Fase 1 — Detecção do ambiente
|
|
86
|
-
|
|
87
|
-
**1.1** Detectar framework de teste:
|
|
88
|
-
```bash
|
|
89
|
-
# Jest
|
|
90
|
-
grep -l "jest" package.json
|
|
91
|
-
# Vitest
|
|
92
|
-
grep -l "vitest" package.json
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**1.2** Detectar framework UI:
|
|
96
|
-
- `react` / `react-dom` → React
|
|
97
|
-
- `vue` → Vue
|
|
98
|
-
- `svelte` → Svelte
|
|
99
|
-
|
|
100
|
-
**1.3** Localizar config de setup:
|
|
101
|
-
```bash
|
|
102
|
-
# Jest
|
|
103
|
-
grep -r "setupFilesAfterSetup\|setupTests" jest.config.* package.json
|
|
104
|
-
# Vitest
|
|
105
|
-
grep -r "setupFiles" vitest.config.*
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Fase 2 — Instalação de dependências
|
|
109
|
-
|
|
110
|
-
**2.1** Verificar se jest-axe já está instalado:
|
|
111
|
-
```bash
|
|
112
|
-
grep "jest-axe" package.json
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
**2.2** Se não instalado, apresentar ao usuário:
|
|
116
|
-
```
|
|
117
|
-
Para testes de acessibilidade, preciso instalar:
|
|
118
|
-
- jest-axe (assertions axe para Jest/Vitest)
|
|
119
|
-
- @types/jest-axe (tipos TypeScript, se aplicável)
|
|
120
|
-
|
|
121
|
-
Instalar? (Sim / Não)
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
**2.3** Se sim:
|
|
125
|
-
```bash
|
|
126
|
-
npm install --save-dev jest-axe @types/jest-axe
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Fase 3 — Configuração global
|
|
130
|
-
|
|
131
|
-
**3.1** Adicionar `toHaveNoViolations` no arquivo de setup:
|
|
132
|
-
|
|
133
|
-
```typescript
|
|
134
|
-
// No setupTests.ts ou equivalente
|
|
135
|
-
import 'jest-axe/extend-expect';
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
> Se o arquivo de setup não existir, criar e registrar no config do Jest/Vitest.
|
|
139
|
-
|
|
140
|
-
### Fase 4 — Scan de componentes
|
|
141
|
-
|
|
142
|
-
**4.1** Listar todos os arquivos de teste no escopo:
|
|
143
|
-
```bash
|
|
144
|
-
find {caminho} -name "*.test.tsx" -o -name "*.spec.tsx" -o -name "*.test.ts" -o -name "*.spec.ts"
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**4.2** Para cada arquivo de teste, verificar se já tem assertion axe:
|
|
148
|
-
```bash
|
|
149
|
-
grep -l "toHaveNoViolations\|jest-axe\|axe" {arquivo}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
**4.3** Filtrar apenas os que renderizam componentes (contêm `render(`) e não têm axe.
|
|
153
|
-
|
|
154
|
-
**4.4** Reportar ao usuário:
|
|
155
|
-
```
|
|
156
|
-
Encontrados {N} arquivos de teste com render.
|
|
157
|
-
{M} já têm assertions axe.
|
|
158
|
-
{K} serão atualizados.
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### Fase 5 — Adicionar assertions axe
|
|
162
|
-
|
|
163
|
-
**5.1** Para cada arquivo de teste sem assertions axe:
|
|
164
|
-
|
|
165
|
-
1. Adicionar import:
|
|
166
|
-
```typescript
|
|
167
|
-
import { axe } from 'jest-axe';
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
2. Adicionar test case após o último `it`/`test` do describe principal:
|
|
171
|
-
```typescript
|
|
172
|
-
it('não possui violações de acessibilidade', async () => {
|
|
173
|
-
const { container } = render(<Componente {...defaultProps} />);
|
|
174
|
-
const results = await axe(container);
|
|
175
|
-
expect(results).toHaveNoViolations();
|
|
176
|
-
});
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
3. Se o componente precisa de providers/contexto (detectar pelo render existente), replicar o setup.
|
|
180
|
-
|
|
181
|
-
**5.2** Não alterar testes existentes — apenas adicionar o novo test case.
|
|
182
|
-
|
|
183
|
-
### Fase 6 — Executar e reportar
|
|
184
|
-
|
|
185
|
-
**6.1** Executar os testes modificados usando o runner detectado na Fase 1:
|
|
186
|
-
```bash
|
|
187
|
-
# Jest
|
|
188
|
-
npx jest --testPathPattern="{padrão}" --no-coverage
|
|
189
|
-
# Vitest
|
|
190
|
-
npx vitest run {padrão}
|
|
191
|
-
```
|
|
192
|
-
> Usar o runner que o projeto já utiliza — nunca forçar um runner diferente.
|
|
193
|
-
|
|
194
|
-
**6.2** Para cada violação encontrada, gerar report:
|
|
195
|
-
|
|
196
|
-
```markdown
|
|
197
|
-
### Violação: {rule-id} ({impact})
|
|
198
|
-
|
|
199
|
-
**Componente:** `{nome}`
|
|
200
|
-
**Elemento:** `{selector}`
|
|
201
|
-
**Problema:** {description}
|
|
202
|
-
**Correção sugerida:**
|
|
203
|
-
```jsx
|
|
204
|
-
// Antes
|
|
205
|
-
<div aria-label="Menu">...</div>
|
|
206
|
-
|
|
207
|
-
// Depois
|
|
208
|
-
<nav aria-label="Menu">...</nav>
|
|
209
|
-
```
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
**6.3** Apresentar resumo ao usuário:
|
|
213
|
-
```
|
|
214
|
-
── a11y Audit ────────────────────────────────────────────
|
|
215
|
-
Componentes testados : {N}
|
|
216
|
-
Sem violações : {OK}
|
|
217
|
-
Com violações : {FAIL}
|
|
218
|
-
Total de violações : {V} ({critical}, {serious}, {moderate}, {minor})
|
|
219
|
-
──────────────────────────────────────────────────────────
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## Regras
|
|
225
|
-
|
|
226
|
-
### Nunca
|
|
227
|
-
- Sobrescrever ou deletar testes existentes
|
|
228
|
-
- Instalar dependências sem confirmação do usuário
|
|
229
|
-
- Ignorar violações de impacto `critical` ou `serious`
|
|
230
|
-
- Hardcodar paths de componentes — usar `$TEST_FOLDER` ou argumento
|
|
231
|
-
|
|
232
|
-
### Sempre
|
|
233
|
-
- Configurar `toHaveNoViolations` no setup global (não em cada arquivo)
|
|
234
|
-
- Replicar providers/contexto do render existente no test axe
|
|
235
|
-
- Sugerir fix para cada violação (não apenas reportar)
|
|
236
|
-
- Executar os testes após adicionar assertions para validar
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
## Checklist de Conclusão
|
|
241
|
-
|
|
242
|
-
- [ ] Framework de teste detectado (Jest/Vitest)
|
|
243
|
-
- [ ] jest-axe instalado
|
|
244
|
-
- [ ] Setup global configurado
|
|
245
|
-
- [ ] Componentes escaneados e filtrados
|
|
246
|
-
- [ ] Assertions axe adicionadas
|
|
247
|
-
- [ ] Testes executados
|
|
248
|
-
- [ ] Violações reportadas com sugestões de fix
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## Output
|
|
253
|
-
|
|
254
|
-
| Artefato | Destino |
|
|
255
|
-
|----------|---------|
|
|
256
|
-
| Testes modificados com assertions axe | Arquivos `.test.tsx` / `.spec.tsx` existentes |
|
|
257
|
-
| Report de violações | Output no terminal + opcional markdown |
|
|
258
|
-
|
|
259
|
-
---
|
|
260
|
-
|
|
261
|
-
## Mensagem de Conclusão
|
|
262
|
-
|
|
263
|
-
```
|
|
264
|
-
── qa-a11y-audit concluído ───────────────────────────────
|
|
265
|
-
Componentes : {N} testados
|
|
266
|
-
Violações : {V} encontradas ({C} critical, {S} serious)
|
|
267
|
-
Arquivos : {M} modificados
|
|
268
|
-
Setup : jest-axe configurado globalmente
|
|
269
|
-
──────────────────────────────────────────────────────────
|
|
270
|
-
```
|