jarvis-ai-framework 2.1.1 → 3.2.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 +14 -115
- package/agents/AGENTS.md +11 -23
- package/agents/README.md +27 -129
- package/agents/engineering/data/eng.data-engineer.agent.md +11 -34
- package/agents/engineering/eng.advisor.agent.md +56 -0
- package/agents/engineering/eng.agent.md +14 -24
- package/agents/engineering/eng.bug-hunter.md +7 -15
- package/agents/engineering/eng.dev-code-reviewer.md +1 -1
- package/agents/engineering/eng.frontend.agent.md +3 -7
- package/agents/engineering/eng.rpa.agent.md +2 -8
- package/agents/engineering/qa/eng.qa.quality-strategist.md +6 -11
- package/agents/engineering/qa/eng.qa.test-architect.md +8 -18
- package/agents/engineering/qa/eng.qa.test-planner.md +10 -14
- package/agents/engineering/qa/eng.qa.testing-engineer.md +91 -24
- package/agents/product/prod.discovery-interviewer.md +3 -3
- 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 +20 -5
- package/bin/commands/qa-signoff.js +58 -55
- package/bin/commands/tokens.js +14 -17
- package/bin/commands/whoami.js +30 -26
- package/bin/jarvis.js +9 -163
- 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 +59 -2
- package/bin/lib/config/ide-config.js +4 -8
- package/bin/lib/core/profile-filter.js +4 -1
- package/bin/lib/core/scanner.js +3 -29
- package/bin/lib/core/sync-engine.js +21 -14
- package/bin/lib/core/token-report.js +12 -2
- 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/parse.js +11 -5
- package/bin/lib/flow-map/render.js +5 -2
- package/bin/lib/flow-map/tree.js +59 -10
- 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/package.json +14 -5
- package/rules/engineering/eng-rules.md +1 -1
- package/rules/engineering/eng-security-rules.md +18 -16
- 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 +6 -4
- package/rules/engineering/eng.skills-rules.md +1 -1
- package/rules/engineering/eng.specializations-rules.md +18 -4
- 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-on-demand/engineering/eng.pre-pr-rules.md +1 -1
- package/rules-on-demand/engineering/eng.start-rules.md +2 -0
- package/skills/AGENTS.md +52 -87
- package/skills/SKILLS-ROADMAP.md +47 -128
- 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-nestjs/SKILL.md +1 -1
- 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 +12 -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-task-comment/SKILL.md +3 -3
- 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 +1 -1
- package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
- package/skills/jarvis-create-specialization/SKILL.md +8 -0
- package/skills/jarvis-docs-central/README.md +31 -28
- package/skills/jarvis-docs-central/SKILL.md +5 -5
- package/skills/jarvis-init/SKILL.md +9 -8
- package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
- package/skills/jarvis-list-specializations/SKILL.md +30 -17
- package/skills/jarvis-report-issue/SKILL.md +1 -1
- package/taxonomy.md +4 -16
- package/templates/AGENTS.md +2 -0
- package/templates/ENV-template.md +20 -2
- package/templates/engineering/advisor-template.md +65 -0
- package/templates/engineering/architecture-template.md +52 -4
- package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
- package/workflows/AGENTS.md +3 -1
- package/workflows/README.md +0 -10
- package/workflows/engineering/data/data.new-pipeline.md +6 -5
- package/workflows/engineering/eng.bug-audit.md +4 -14
- package/workflows/engineering/eng.debug.md +4 -20
- package/workflows/engineering/eng.plan.md +4 -26
- package/workflows/engineering/eng.pr.md +13 -63
- package/workflows/engineering/eng.pre-pr.md +14 -51
- package/workflows/engineering/eng.review.md +7 -13
- package/workflows/engineering/eng.rpa.robot.md +3 -9
- package/workflows/engineering/eng.start.md +37 -32
- package/workflows/engineering/eng.work.md +17 -40
- package/workflows/engineering/qa/eng.qa-sprint-planning.md +1 -1
- package/workflows/product/prod.spec.discovery.md +2 -2
- package/workflows/warm-up.md +35 -63
- package/agents/engineering/eng.cybersecurity.agent.md +0 -486
- package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -112
- package/bin/lib/docs/fetch-file.sh +0 -41
- package/bin/lib/docs/publish-file.sh +0 -284
- 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 -303
- package/skills/eng-data-bi/SKILL.md +0 -206
- package/skills/eng-data-debug/SKILL.md +0 -314
- package/skills/eng-data-engineer/SKILL.md +0 -266
- package/skills/eng-data-onboard/SKILL.md +0 -317
- package/skills/eng-data-orchestrator/SKILL.md +0 -433
- package/skills/eng-devops-performance-engineer/SKILL.md +0 -319
- package/skills/eng-frontend-design-system/SKILL.md +0 -155
- package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +0 -57
- package/skills/eng-frontend-design-system/references/2-tokens.md +0 -116
- package/skills/eng-frontend-design-system/references/3-componentes.md +0 -165
- package/skills/eng-frontend-design-system/references/4-storybook.md +0 -85
- package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +0 -76
- package/skills/eng-frontend-microfrontend/SKILL.md +0 -164
- package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +0 -109
- package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +0 -70
- package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +0 -73
- package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +0 -48
- package/skills/eng-frontend-microfrontend/references/5-event-bus.md +0 -59
- package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +0 -77
- package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +0 -45
- package/skills/eng-global-browser-extension-builder/SKILL.md +0 -392
- package/skills/eng-global-jira-comment/SKILL.md +0 -27
- package/skills/eng-qa-a11y-audit/SKILL.md +0 -276
- package/skills/eng-qa-bug-report/SKILL.md +0 -877
- package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
- package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +0 -148
- package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +0 -46
- package/skills/eng-qa-bug-report/references/3-bug-to-test.md +0 -45
- package/skills/eng-qa-cypress-e2e/SKILL.md +0 -184
- package/skills/eng-qa-dev-guide/SKILL.md +0 -173
- package/skills/eng-qa-e2e/SKILL.md +0 -407
- package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -329
- package/skills/eng-qa-exploratory/SKILL.md +0 -196
- package/skills/eng-qa-gate/SKILL.md +0 -377
- package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
- package/skills/eng-qa-graphql-contract/SKILL.md +0 -263
- package/skills/eng-qa-quality-report/SKILL.md +0 -419
- package/skills/eng-qa-test-plan/SKILL.md +0 -473
- package/skills/eng-qa-testsprite/SKILL.md +0 -332
- package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
- package/skills/eng-qa-unit-test/SKILL.md +0 -478
- package/skills/eng-scraper/SKILL.md +0 -260
- package/skills/eng-scraper/references/1-puppeteer.md +0 -140
- package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +0 -82
- package/skills/eng-scraper/references/3-anti-bot.md +0 -94
- package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +0 -137
- package/skills/eng-scraper-robot-builder/SKILL.md +0 -377
- package/skills/eng-security-cybersecurity/SKILL.md +0 -250
- package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +0 -331
- package/skills/eng-security-cybersecurity/references/2-secrets-management.md +0 -31
- package/skills/eng-security-cybersecurity/references/3-input-validation.md +0 -43
- package/skills/eng-security-cybersecurity/references/4-compliance.md +0 -20
- package/skills/eng-security-patch/SKILL.md +0 -388
- package/skills/eng-security-threat-model/SKILL.md +0 -171
- package/skills/eng-security-triage/SKILL.md +0 -276
- 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 -319
- package/workflows/engineering/eng.security-incident.md +0 -281
- package/workflows/engineering/eng.security-pipeline.md +0 -219
- package/workflows/engineering/eng.security-review.md +0 -241
- package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -57
- package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -57
- package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -68
- package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -209
- package/workflows/engineering/qa/eng.qa-quality-report.md +0 -85
- /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
|
@@ -175,17 +175,13 @@ Para detecção automática de contexto de tarefas:
|
|
|
175
175
|
- Uso: `/jarvis-context-detect [jira-key]` ou `/jarvis-context-detect --override tipo=hotfix`
|
|
176
176
|
- Chamado automaticamente pelo workflow `eng.start`
|
|
177
177
|
|
|
178
|
-
### eng-
|
|
179
|
-
Quando a tarefa envolver análise ou otimização de performance, observabilidade, gargalos, latência, load testing ou
|
|
180
|
-
- Arquivo: `$IDE/skills/eng-
|
|
178
|
+
### eng-platform (performance)
|
|
179
|
+
Quando a tarefa envolver análise ou otimização de performance, observabilidade, gargalos, latência, load testing, chaos engineering ou cache multi-camada — temas 7, 14, 15 e 16 da base de platform:
|
|
180
|
+
- Arquivo: `$IDE/skills/eng-platform/SKILL.md`
|
|
181
181
|
|
|
182
|
-
### eng-ai
|
|
182
|
+
### eng-ai
|
|
183
183
|
Quando a tarefa envolver features com LLM, sistemas RAG, agentes de IA, chatbots, embeddings, busca vetorial ou integrações com modelos de IA:
|
|
184
|
-
- Arquivo: `$IDE/skills/eng-ai
|
|
185
|
-
|
|
186
|
-
### eng-global-browser-extension-builder
|
|
187
|
-
Quando a tarefa envolver criação ou manutenção de extensões de navegador (Chrome, Firefox, Manifest V3, content scripts, popup UI):
|
|
188
|
-
- Arquivo: `$IDE/skills/eng-global-browser-extension-builder/SKILL.md`
|
|
184
|
+
- Arquivo: `$IDE/skills/eng-ai/SKILL.md`
|
|
189
185
|
|
|
190
186
|
### Backend e frontend (skill base + especializações)
|
|
191
187
|
Quando a tarefa envolver **backend** (APIs, autenticação, workers e jobs assíncronos, filas e mensageria, integrações externas, cache, banco de dados) ou **frontend** (componentes, estado, estilos, performance de UI, acessibilidade, testes de interface), não escolha o skill por nome: aplique a regra `$IDE/rules/engineering/eng.specializations-rules.md` para a área envolvida. Ela carrega o skill base e as especializações que o projeto registrou no `ENV.md`:
|
|
@@ -194,26 +190,20 @@ Quando a tarefa envolver **backend** (APIs, autenticação, workers e jobs assí
|
|
|
194
190
|
- Workflows relacionados: `eng.start` (arquitetura), `eng.work` (implementação), `eng.debug` (troubleshooting)
|
|
195
191
|
- Para ver o que está instalado e registrado: `/jarvis-list-specializations`
|
|
196
192
|
|
|
197
|
-
### eng-
|
|
193
|
+
### eng-automation
|
|
198
194
|
Quando a tarefa envolver web scraping, extração de dados de páginas web, automação de browser com Puppeteer, parsing de HTML/XML/PDF, pipelines ETL leves ou monitoramento de mudanças em sites:
|
|
199
|
-
- Arquivo: `$IDE/skills/eng-
|
|
195
|
+
- Arquivo: `$IDE/skills/eng-automation/SKILL.md`
|
|
200
196
|
- Workflows relacionados: `eng.work` (implementação de scrapers)
|
|
201
197
|
|
|
202
|
-
### eng-
|
|
203
|
-
Quando
|
|
204
|
-
- Arquivo: `$IDE/skills/eng-
|
|
205
|
-
- Workflows relacionados: `eng.work` (criação de scripts de automação)
|
|
206
|
-
|
|
207
|
-
### eng-qa-e2e
|
|
208
|
-
Quando o QA precisar criar testes E2E de sistema em linguagem natural, validar fluxos completos de usuário ou gerar testes resilientes a mudanças de UI. Usa Stagehand — testes permanecem em linguagem natural (sem seletores hardcoded). Suporta exportação para Cypress quando necessário para CI/CD:
|
|
209
|
-
- Arquivo: `$IDE/skills/eng-qa-e2e/SKILL.md`
|
|
198
|
+
### eng-qa
|
|
199
|
+
Quando precisar planejar estratégia de testes, validar fluxos completos de usuário ou cobrir testes E2E — base de QA, complementada pela especialização registrada em `QA_SPECIALIZATIONS`:
|
|
200
|
+
- Arquivo: `$IDE/skills/eng-qa/SKILL.md`
|
|
210
201
|
- Workflows relacionados: `eng.pr` (validação pré-PR), `eng.pre-pr` (cobertura de testes E2E)
|
|
211
202
|
|
|
212
|
-
### eng-
|
|
213
|
-
Quando a tarefa envolver segurança de
|
|
214
|
-
- Arquivo: `$IDE/skills/eng-
|
|
215
|
-
-
|
|
216
|
-
- Workflows relacionados: `eng.security-audit` (auditoria proativa), `eng.security-incident` (resposta a CVEs), `eng.security-review` (gate pré-merge)
|
|
203
|
+
### eng-platform
|
|
204
|
+
Quando a tarefa envolver segurança de infraestrutura, fundamentos de segurança da informação (risco, ameaças, identidade, resposta a incidente, GRC, privacidade) ou auditoria de dependências/supply chain — base de platform, complementada pela especialização registrada em `PLATFORM_SPECIALIZATIONS`:
|
|
205
|
+
- Arquivo: `$IDE/skills/eng-platform/SKILL.md` (temas 9 e 13)
|
|
206
|
+
- Segurança de código de aplicação (OWASP, inputs, auth) já é padrão embutido em `eng-backend`/`eng-frontend`
|
|
217
207
|
|
|
218
208
|
---
|
|
219
209
|
|
|
@@ -191,18 +191,16 @@ CONTEXT_PROFILE:
|
|
|
191
191
|
- Priorize:
|
|
192
192
|
- `$IDE/workflows/engineering/eng.debug.md` (Resolution Mode)
|
|
193
193
|
- `$IDE/workflows/engineering/eng.bug-audit.md` (Audit Mode)
|
|
194
|
-
- `$IDE/skills/eng-qa
|
|
194
|
+
- `$IDE/skills/eng-qa/SKILL.md` (estruturação de achados, tema 14 — Gestão de Testes e de Defeitos)
|
|
195
195
|
- Não acione workflows de outros domínios sem autorização explícita do usuário
|
|
196
196
|
|
|
197
197
|
---
|
|
198
198
|
|
|
199
199
|
## Skills Disponíveis
|
|
200
200
|
|
|
201
|
-
### eng-qa
|
|
202
|
-
Para
|
|
203
|
-
- Arquivo: `$IDE/skills/eng-qa
|
|
204
|
-
- Uso: `/eng-qa-bug-report [modo] [argumentos]`
|
|
205
|
-
- Integração com Jira para criação automática de cards
|
|
201
|
+
### eng-qa
|
|
202
|
+
Para estruturar os bugs encontrados (tema 14 — Gestão de Testes e de Defeitos) antes de abrir o card no `$TASK_MANAGER` do projeto — base de QA, complementada pela especialização registrada em `QA_SPECIALIZATIONS`:
|
|
203
|
+
- Arquivo: `$IDE/skills/eng-qa/SKILL.md`
|
|
206
204
|
|
|
207
205
|
### jarvis-context-detect (CDD)
|
|
208
206
|
Para detecção automática de contexto:
|
|
@@ -218,10 +216,9 @@ Para rastreamento automático de bugs em arquitetura de microsserviços, use a e
|
|
|
218
216
|
- Mapeia cadeia de chamadas HTTP + AMQP, analisa contratos em cada boundary e rankeia hipóteses por risco
|
|
219
217
|
- Sem a especialização registrada, siga a investigação cross-service manualmente
|
|
220
218
|
|
|
221
|
-
### eng-
|
|
222
|
-
Quando o bug tiver impacto de segurança (injection, auth bypass, data exposure), como referência
|
|
223
|
-
- Arquivo: `$IDE/skills/eng-
|
|
224
|
-
- Agente dedicado: `$IDE/agents/engineering/eng.cybersecurity.agent.md` (SENTINEL)
|
|
219
|
+
### eng-platform
|
|
220
|
+
Quando o bug tiver impacto de segurança de infraestrutura (injection, auth bypass, data exposure), como referência — segurança de código de aplicação já é padrão embutido em `eng-backend`/`eng-frontend`:
|
|
221
|
+
- Arquivo: `$IDE/skills/eng-platform/SKILL.md` (temas 9 e 13)
|
|
225
222
|
|
|
226
223
|
---
|
|
227
224
|
|
|
@@ -322,11 +319,6 @@ Quando o bug tiver impacto de segurança (injection, auth bypass, data exposure)
|
|
|
322
319
|
- Valida qualidade da correção proposta
|
|
323
320
|
- Garante aderência a padrões do projeto
|
|
324
321
|
|
|
325
|
-
- **Com SENTINEL (eng.cybersecurity.agent)**
|
|
326
|
-
- Bugs com impacto de segurança (injection, auth bypass, data exposure) são escalados para SENTINEL
|
|
327
|
-
- SENTINEL classifica por severidade CVSS e coordena a resposta
|
|
328
|
-
- Skill de referência: `$IDE/skills/eng-security-cybersecurity/SKILL.md`
|
|
329
|
-
|
|
330
322
|
---
|
|
331
323
|
|
|
332
324
|
## Checklist de Qualidade
|
|
@@ -49,7 +49,7 @@ Para cada arquivo alterado, avalie:
|
|
|
49
49
|
- Exposição de dados sensíveis (PII em logs, stack traces em produção)
|
|
50
50
|
- Vulnerabilidades em dependências (npm audit)
|
|
51
51
|
- Secrets hardcoded no código (tokens, senhas, API keys)
|
|
52
|
-
- Se achados de segurança HIGH/CRITICAL:
|
|
52
|
+
- Se achados de segurança HIGH/CRITICAL: bloquear o PR e pedir revisão humana de um tech lead antes do merge
|
|
53
53
|
|
|
54
54
|
3. Revisão de Documentação
|
|
55
55
|
Verifique se a documentação reflete as mudanças realizadas:
|
|
@@ -57,13 +57,9 @@ Para criar ou refatorar componente, estado ou estilos, aplique a regra `eng.spec
|
|
|
57
57
|
- Skill base: `$IDE/skills/eng-frontend/SKILL.md` + itens de `FRONTEND_SPECIALIZATIONS`
|
|
58
58
|
- Auditoria de performance: seção Performance do `eng-frontend`
|
|
59
59
|
|
|
60
|
-
### eng-qa
|
|
61
|
-
Para testes E2E de fluxo de usuário
|
|
62
|
-
- Arquivo: `$IDE/skills/eng-qa
|
|
63
|
-
|
|
64
|
-
### eng-qa-cypress-e2e
|
|
65
|
-
Para testes Cypress (Page Objects, intercept):
|
|
66
|
-
- Arquivo: `$IDE/skills/eng-qa-cypress-e2e/SKILL.md`
|
|
60
|
+
### eng-qa
|
|
61
|
+
Para testes E2E de fluxo de usuário — base de QA, complementada pela especialização registrada em `QA_SPECIALIZATIONS`:
|
|
62
|
+
- Arquivo: `$IDE/skills/eng-qa/SKILL.md`
|
|
67
63
|
|
|
68
64
|
## Workflows e Agentes Relacionados
|
|
69
65
|
|
|
@@ -98,16 +98,11 @@ CONTEXT_PROFILE:
|
|
|
98
98
|
|
|
99
99
|
## Skills Disponíveis
|
|
100
100
|
|
|
101
|
-
### eng-
|
|
101
|
+
### eng-automation
|
|
102
102
|
Para scraping, parsing HTML/XML/PDF, ETL leve, monitoramento de mudanças:
|
|
103
|
-
- Arquivo: `$IDE/skills/eng-
|
|
103
|
+
- Arquivo: `$IDE/skills/eng-automation/SKILL.md`
|
|
104
104
|
- Trigger: extração de dados de fontes web, headless browser, pipelines ETL
|
|
105
105
|
|
|
106
|
-
### eng-scraper-robot-builder
|
|
107
|
-
Para converter fluxo manual em robô Playwright via Stagehand:
|
|
108
|
-
- Arquivo: `$IDE/skills/eng-scraper-robot-builder/SKILL.md`
|
|
109
|
-
- Trigger: produto/dev descreveu passos manuais e quer automação, sem conhecer seletores
|
|
110
|
-
|
|
111
106
|
### Backend (skill base + especializações)
|
|
112
107
|
Para filas, retry DLX, publicação e consumo de mensagens, workers, cron jobs e integrações externas com retry/circuit breaker, aplique a regra `$IDE/rules/engineering/eng.specializations-rules.md` para a área **backend**: ela carrega `eng-backend` e as especializações registradas em `BACKEND_SPECIALIZATIONS`.
|
|
113
108
|
- Trigger: robô precisa publicar resultados em fila, consumir tarefas, implementar retry, ter um worker persistente, scheduler ou API de consumo dos dados extraídos
|
|
@@ -147,7 +142,6 @@ Para criar um robô novo ou manter um existente:
|
|
|
147
142
|
|----------|-----------|
|
|
148
143
|
| MCP Playwright disponível na sessão | **Playwright MCP** — navega e inspeciona direto da IDE |
|
|
149
144
|
| Dev quer demonstrar o fluxo | **Playwright CLI** (`npx playwright codegen {url}`) |
|
|
150
|
-
| Fluxo descrito em linguagem natural | **Stagehand** (`observe()`) via `/eng-scraper-robot-builder` |
|
|
151
145
|
|
|
152
146
|
> Perguntar ao dev qual prefere. Só decidir automaticamente se `MAX_AI_EXECUTION_PERCENTAGE=100`.
|
|
153
147
|
|
|
@@ -21,22 +21,17 @@ Você responde perguntas como:
|
|
|
21
21
|
|
|
22
22
|
## Skills Disponíveis
|
|
23
23
|
|
|
24
|
-
### eng-qa-
|
|
24
|
+
### eng-qa-planner
|
|
25
25
|
Para planejar os testes de uma feature específica:
|
|
26
|
-
- Arquivo: `$IDE/skills/eng-qa-
|
|
26
|
+
- Arquivo: `$IDE/skills/eng-qa-planner/SKILL.md`
|
|
27
27
|
|
|
28
|
-
### eng-qa
|
|
29
|
-
Para a análise de risco pré-release
|
|
30
|
-
- Arquivo: `$IDE/skills/eng-qa
|
|
31
|
-
|
|
32
|
-
### eng-qa-dev-guide
|
|
33
|
-
Para features de médio risco: o QA orienta e o dev implementa os testes:
|
|
34
|
-
- Arquivo: `$IDE/skills/eng-qa-dev-guide/SKILL.md`
|
|
28
|
+
### eng-qa
|
|
29
|
+
Para a análise de risco pré-release e para orientar o dev em features de médio risco — base de QA, complementada pela especialização registrada em `QA_SPECIALIZATIONS`:
|
|
30
|
+
- Arquivo: `$IDE/skills/eng-qa/SKILL.md`
|
|
35
31
|
|
|
36
32
|
## Workflows e Agentes Relacionados
|
|
37
33
|
|
|
38
34
|
- `eng.qa-refinement-entry` (workflow): entrada no refinamento de uma feature
|
|
39
|
-
- `eng.qa-quality-report` (workflow): gerar o relatório de qualidade do período
|
|
40
35
|
|
|
41
36
|
---
|
|
42
37
|
|
|
@@ -72,7 +67,7 @@ Para times com alta proporção de devs por QA:
|
|
|
72
67
|
| Fator | Estratégia |
|
|
73
68
|
|-------|-----------|
|
|
74
69
|
| Features de alto risco | QA conduz — prioridade máxima |
|
|
75
|
-
| Features de médio risco | QA orienta via `eng-qa
|
|
70
|
+
| Features de médio risco | QA orienta via a base `eng-qa` + `QA_SPECIALIZATIONS`, dev implementa testes |
|
|
76
71
|
| Features de baixo risco | Dev responsável pela cobertura, QA revisa |
|
|
77
72
|
| Bugs críticos | QA cobre com sessão exploratória após fix |
|
|
78
73
|
|
|
@@ -81,23 +81,19 @@ Este agente foca em:
|
|
|
81
81
|
**Para outros tipos de teste, use:**
|
|
82
82
|
- `eng.qa.test-planner` → Análise de cobertura e identificação de gaps
|
|
83
83
|
- `eng.qa.testing-engineer` → Escrita de testes unitários
|
|
84
|
-
- `eng-qa
|
|
84
|
+
- `eng-qa` → Base de QA, incluindo E2E e automação (via especialização registrada em `QA_SPECIALIZATIONS`)
|
|
85
85
|
|
|
86
86
|
---
|
|
87
87
|
|
|
88
88
|
## Skills Disponíveis
|
|
89
89
|
|
|
90
|
-
### eng-qa
|
|
91
|
-
Para execução automatizada E2E/API
|
|
92
|
-
- Arquivo: `$IDE/skills/eng-qa
|
|
90
|
+
### eng-qa
|
|
91
|
+
Para execução automatizada E2E/API e padrões de testes unitários — base de QA, complementada pela especialização registrada em `QA_SPECIALIZATIONS`:
|
|
92
|
+
- Arquivo: `$IDE/skills/eng-qa/SKILL.md`
|
|
93
93
|
|
|
94
|
-
### eng-qa-
|
|
94
|
+
### eng-qa-planner
|
|
95
95
|
Para análise de cobertura:
|
|
96
|
-
- Arquivo: `$IDE/skills/eng-qa-
|
|
97
|
-
|
|
98
|
-
### eng-qa-unit-test
|
|
99
|
-
Para padrões de testes unitários:
|
|
100
|
-
- Arquivo: `$IDE/skills/eng-qa-unit-test/SKILL.md`
|
|
96
|
+
- Arquivo: `$IDE/skills/eng-qa-planner/SKILL.md`
|
|
101
97
|
|
|
102
98
|
### jarvis-context-detect (CDD)
|
|
103
99
|
Para detecção automatizada do contexto (calibração contextual do agente):
|
|
@@ -400,12 +396,6 @@ Dependendo da solicitação, gere:
|
|
|
400
396
|
|
|
401
397
|
---
|
|
402
398
|
|
|
403
|
-
##
|
|
404
|
-
|
|
405
|
-
Para complementar com testes E2E automatizados:
|
|
406
|
-
|
|
407
|
-
```bash
|
|
408
|
-
/eng-qa-testsprite codebase
|
|
409
|
-
```
|
|
399
|
+
## Testes E2E automatizados
|
|
410
400
|
|
|
411
|
-
|
|
401
|
+
Para complementar com testes E2E automatizados, use a especialização registrada em `QA_SPECIALIZATIONS` (via a base `eng-qa`) para o codebase, complementando a estratégia definida por este agente.
|
|
@@ -20,7 +20,7 @@ Aplicar quando invocado via `eng.qa-refinement-entry` ou quando o argumento rece
|
|
|
20
20
|
- Saída: `$DOCS_FOLDER/engineering/qa/strategies/{task-id}-test-strategy.md`
|
|
21
21
|
|
|
22
22
|
**Modo B — Análise de Cobertura (pós-código)**
|
|
23
|
-
Aplicar quando invocado via `eng-qa
|
|
23
|
+
Aplicar quando invocado via `eng-qa`, `eng-qa-planner` ou quando houver código implementado na branch (git diff retorna resultados).
|
|
24
24
|
- Fonte de dados: `git diff origin/main...HEAD`
|
|
25
25
|
- Saída: `$DOCS_FOLDER/engineering/qa/{task-id}-test_coverage_branch_report.md`
|
|
26
26
|
|
|
@@ -30,13 +30,13 @@ Regra de decisão: se `git diff origin/main...HEAD` retornar vazio, operar em Mo
|
|
|
30
30
|
|
|
31
31
|
Use os recursos abaixo como fonte de verdade do processo:
|
|
32
32
|
|
|
33
|
-
### eng-qa-
|
|
33
|
+
### eng-qa-planner
|
|
34
34
|
Para análise de cobertura e planejamento de testes:
|
|
35
|
-
- Arquivo: `$IDE/skills/eng-qa-
|
|
35
|
+
- Arquivo: `$IDE/skills/eng-qa-planner/SKILL.md`
|
|
36
36
|
|
|
37
|
-
### eng-qa
|
|
38
|
-
Para execução automatizada de testes
|
|
39
|
-
- Arquivo: `$IDE/skills/eng-qa
|
|
37
|
+
### eng-qa
|
|
38
|
+
Para execução automatizada de testes — base de QA, complementada pela especialização registrada em `QA_SPECIALIZATIONS`:
|
|
39
|
+
- Arquivo: `$IDE/skills/eng-qa/SKILL.md`
|
|
40
40
|
|
|
41
41
|
### jarvis-context-detect (CDD)
|
|
42
42
|
Para detecção automatizada do contexto (calibração contextual do agente):
|
|
@@ -284,7 +284,7 @@ Regras de formato:
|
|
|
284
284
|
|
|
285
285
|
## Fluxo de Trabalho — Modo B (Análise de Cobertura pós-código)
|
|
286
286
|
|
|
287
|
-
Usar quando: invocado via `eng-qa
|
|
287
|
+
Usar quando: invocado via `eng-qa` ou `eng-qa-planner`, ou quando git diff retornar resultados.
|
|
288
288
|
|
|
289
289
|
### B.1. Analisar Mudanças da Branch
|
|
290
290
|
|
|
@@ -342,13 +342,9 @@ Determine quais testes estão faltando:
|
|
|
342
342
|
|
|
343
343
|
---
|
|
344
344
|
|
|
345
|
-
### B.5. Validar com
|
|
345
|
+
### B.5. Validar com Especialização Registrada (Opcional)
|
|
346
346
|
|
|
347
|
-
Se
|
|
348
|
-
|
|
349
|
-
```
|
|
350
|
-
/eng-qa-testsprite diff
|
|
351
|
-
```
|
|
347
|
+
Se houver uma especialização de execução/geração automatizada registrada em `QA_SPECIALIZATIONS`, sugira usá-la (via a base `eng-qa`) para validação automatizada do diff.
|
|
352
348
|
|
|
353
349
|
Isso permite:
|
|
354
350
|
- Gerar testes automatizados para as mudanças
|
|
@@ -482,5 +478,5 @@ Fluxo completo recomendado:
|
|
|
482
478
|
eng.qa.test-planner (análise)
|
|
483
479
|
→ eng.qa.testing-engineer (escrita)
|
|
484
480
|
→ eng.qa.test-architect (performance/security)
|
|
485
|
-
→ eng-qa
|
|
481
|
+
→ eng-qa (validação E2E, via especialização de QA_SPECIALIZATIONS)
|
|
486
482
|
```
|
|
@@ -12,25 +12,13 @@ realmente funciona como pretendido — tanto testes unitários quanto E2E Cypres
|
|
|
12
12
|
|
|
13
13
|
## Skills Disponíveis
|
|
14
14
|
|
|
15
|
-
### eng-qa
|
|
16
|
-
Para gerar specs
|
|
17
|
-
- Arquivo: `$IDE/skills/eng-qa
|
|
15
|
+
### eng-qa
|
|
16
|
+
Para gerar specs E2E, escrever testes unitários e orientar devs sobre cobertura — base de QA, complementada pela especialização registrada em `QA_SPECIALIZATIONS`:
|
|
17
|
+
- Arquivo: `$IDE/skills/eng-qa/SKILL.md`
|
|
18
18
|
|
|
19
|
-
### eng-qa-
|
|
20
|
-
Para templates e padrões ao **escrever** testes unitários:
|
|
21
|
-
- Arquivo: `$IDE/skills/eng-qa-unit-test/SKILL.md`
|
|
22
|
-
|
|
23
|
-
### eng-qa-test-plan
|
|
19
|
+
### eng-qa-planner
|
|
24
20
|
Para **analisar** cobertura antes de escrever:
|
|
25
|
-
- Arquivo: `$IDE/skills/eng-qa-
|
|
26
|
-
|
|
27
|
-
### eng-qa-testsprite
|
|
28
|
-
Para testes E2E/API em linguagem natural via Stagehand:
|
|
29
|
-
- Arquivo: `$IDE/skills/eng-qa-testsprite/SKILL.md`
|
|
30
|
-
|
|
31
|
-
### eng-qa-dev-guide
|
|
32
|
-
Para orientar devs sobre cobertura sem escrever o teste:
|
|
33
|
-
- Arquivo: `$IDE/skills/eng-qa-dev-guide/SKILL.md`
|
|
21
|
+
- Arquivo: `$IDE/skills/eng-qa-planner/SKILL.md`
|
|
34
22
|
|
|
35
23
|
### jarvis-context-detect (CDD)
|
|
36
24
|
Para detecção automatizada do contexto (calibração contextual do agente):
|
|
@@ -41,7 +29,90 @@ Para detecção automatizada do contexto (calibração contextual do agente):
|
|
|
41
29
|
> Consultar `$RULES_FOLDER/engineering/qa/eng.qa.cypress-standards-rules.md` para convenções do projeto.
|
|
42
30
|
>
|
|
43
31
|
> **Testes unitários**: linguagem/framework nativo do projeto (TypeScript/Jest, Python/pytest, etc.)
|
|
44
|
-
>
|
|
32
|
+
> A especialização de E2E registrada em `QA_SPECIALIZATIONS` (via a base `eng-qa`) complementa, não substitui Cypress.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Cypress E2E — Domínio e Debugging
|
|
37
|
+
|
|
38
|
+
> 🔒 **Fonte de verdade de convenções**: `$RULES_FOLDER/engineering/qa/eng.qa.cypress-standards-rules.md`
|
|
39
|
+
> Sempre ler antes de sugerir padrões ou gerar código. Para **gerar** uma spec nova, use a especialização de Cypress registrada em `QA_SPECIALIZATIONS` (via a base `eng-qa`); esta seção cobre o julgamento por trás de revisar, debugar e manter specs existentes.
|
|
40
|
+
|
|
41
|
+
### Domínios de Expertise
|
|
42
|
+
|
|
43
|
+
#### Page Objects
|
|
44
|
+
- Estrutura fluent (retorno `this`)
|
|
45
|
+
- Organização por domínio vs. por página
|
|
46
|
+
- Herança e composição entre Page Objects
|
|
47
|
+
- Quando criar vs. quando estender um existente
|
|
48
|
+
|
|
49
|
+
#### Custom Commands
|
|
50
|
+
- Tipagem com TypeScript (`Cypress.Commands.add`)
|
|
51
|
+
- Declaração em `support/index.d.ts`
|
|
52
|
+
- Commands de autenticação via `cy.request` (não via UI)
|
|
53
|
+
- Commands de setup de estado (seed de dados, limpeza)
|
|
54
|
+
|
|
55
|
+
#### Fixtures e Intercepts
|
|
56
|
+
- Estrutura de pastas de fixtures por domínio
|
|
57
|
+
- Tipagem de fixtures com tipos do projeto (`cy.fixture<T>`)
|
|
58
|
+
- Padrões de `cy.intercept` para REST e GraphQL
|
|
59
|
+
- Gestão de aliases e `cy.wait`
|
|
60
|
+
- Estratégia de intercept para diferentes cenários (sucesso, erro, timeout)
|
|
61
|
+
|
|
62
|
+
#### Viewport e Responsividade
|
|
63
|
+
- `cy.viewport()` para testes multi-device
|
|
64
|
+
- Breakpoints a cobrir conforme o projeto
|
|
65
|
+
- Configuração em `cypress.config.ts`
|
|
66
|
+
|
|
67
|
+
#### Configuração e CI
|
|
68
|
+
- `cypress.config.ts` — baseUrl, env, retries, video
|
|
69
|
+
- Estratégia de retries para flakiness (retry ≠ resolver o problema)
|
|
70
|
+
- Paralelização com Cypress Cloud ou via CI nativo
|
|
71
|
+
- Variáveis de ambiente seguras (`Cypress.env()` vs. hardcode)
|
|
72
|
+
- Artefatos de CI: screenshots, vídeos, relatórios
|
|
73
|
+
|
|
74
|
+
### Debugging de Testes Flaky
|
|
75
|
+
|
|
76
|
+
Causas comuns e soluções:
|
|
77
|
+
|
|
78
|
+
| Causa | Sintoma | Solução |
|
|
79
|
+
|-------|---------|---------|
|
|
80
|
+
| Race condition | Teste falha 1 em 5 vezes | Usar `cy.wait('@alias')` em vez de `cy.wait(ms)` |
|
|
81
|
+
| Estado compartilhado | Teste passa isolado, falha em suite | `beforeEach` garante estado limpo |
|
|
82
|
+
| Animação/transição | Clique em elemento não dispara | `.should('be.visible')` antes de `.click()` |
|
|
83
|
+
| Dados dinâmicos | Assertion em texto que muda | Usar `contain` em vez de `eq`, ou mockar dado |
|
|
84
|
+
| API real | Falha intermitente por timeout | Interceptar sempre — nunca depender de API real |
|
|
85
|
+
| Seletor frágil | Falha após deploy de UI | Migrar para `data-testid` |
|
|
86
|
+
|
|
87
|
+
### Para Debugging de Spec Cypress
|
|
88
|
+
|
|
89
|
+
1. Perguntar: o teste falha sempre ou às vezes? (determina se é flaky ou quebrado)
|
|
90
|
+
2. Pedir o erro e o trecho de código relevante
|
|
91
|
+
3. Identificar a causa raiz antes de sugerir solução
|
|
92
|
+
4. Nunca recomendar aumentar retry como solução definitiva
|
|
93
|
+
|
|
94
|
+
### Para Revisão de Spec Cypress
|
|
95
|
+
|
|
96
|
+
Ler a spec fornecida e verificar:
|
|
97
|
+
- Seletores: algum usando classe/id? → migrar para `data-testid`
|
|
98
|
+
- Intercepts: alguma API não interceptada? → adicionar
|
|
99
|
+
- Dependência entre testes: algum `it` depende de outro? → corrigir
|
|
100
|
+
- `cy.wait(ms)` hardcoded? → substituir por alias
|
|
101
|
+
- Page Object ausente? → criar ou indicar onde adicionar
|
|
102
|
+
|
|
103
|
+
### Regras Específicas de Cypress
|
|
104
|
+
|
|
105
|
+
**Nunca**
|
|
106
|
+
- Sugerir `cy.wait({número})` como solução — identificar a causa real da espera
|
|
107
|
+
- Aceitar seletores por classe CSS em specs novas
|
|
108
|
+
- Recomendar retry como fix de flakiness — é um paliativo, não solução
|
|
109
|
+
- Ignorar tipagem TypeScript — fixtures, commands e Page Objects devem ser tipados
|
|
110
|
+
|
|
111
|
+
**Sempre**
|
|
112
|
+
- Ler `eng.qa.cypress-standards-rules.md` antes de qualquer sugestão de padrão
|
|
113
|
+
- Justificar por que uma prática é ruim antes de sugerir a alternativa
|
|
114
|
+
- Verificar se já existe Page Object/command para o domínio antes de criar novo
|
|
115
|
+
- Considerar manutenibilidade: um teste bom é um teste que não falha sem razão
|
|
45
116
|
|
|
46
117
|
---
|
|
47
118
|
|
|
@@ -302,13 +373,9 @@ pytest test_filename.py -v
|
|
|
302
373
|
|
|
303
374
|
---
|
|
304
375
|
|
|
305
|
-
## Validação
|
|
306
|
-
|
|
307
|
-
Após escrever os testes, sugira executar o skill **eng-qa-testsprite** para validação automatizada E2E:
|
|
376
|
+
## Validação Automatizada E2E (Opcional)
|
|
308
377
|
|
|
309
|
-
|
|
310
|
-
/eng-qa-testsprite diff
|
|
311
|
-
```
|
|
378
|
+
Após escrever os testes, se houver uma especialização de execução automatizada registrada em `QA_SPECIALIZATIONS`, sugira usá-la (via a base `eng-qa`) para validação E2E do diff.
|
|
312
379
|
|
|
313
380
|
Isso complementa os testes unitários com:
|
|
314
381
|
- Testes E2E (frontend) ou API (backend)
|
|
@@ -89,9 +89,9 @@ Para consultar a arquitetura atual:
|
|
|
89
89
|
- Arquivo: `$IDE/skills/eng-backend-arch-c4/SKILL.md`
|
|
90
90
|
- Confiança: só com a confirmação do usuário (skill de engenharia: pergunte antes de consultá-la; o que ela retornar entra no discovery como **suposição a validar**, não como fato)
|
|
91
91
|
|
|
92
|
-
### eng-
|
|
93
|
-
Para quando a ideia envolve
|
|
94
|
-
- Arquivo: `$IDE/skills/eng-
|
|
92
|
+
### eng-platform
|
|
93
|
+
Para quando a ideia envolve infraestrutura, dados pessoais ou fluxo financeiro com risco de segurança/privacidade:
|
|
94
|
+
- Arquivo: `$IDE/skills/eng-platform/SKILL.md` (temas 9 e 13)
|
|
95
95
|
- Confiança: só com a confirmação do usuário (skill de engenharia: pergunte antes de consultá-la; o que ela retornar entra no discovery como **suposição a validar**, não como fato)
|
|
96
96
|
|
|
97
97
|
## Restrições
|
package/bin/README.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# bin/ — CLI `jarvis`
|
|
2
|
+
|
|
3
|
+
Fonte do binário `jarvis` (instalado via `npm install -g jarvis-ai-framework`, entrypoint declarado em `package.json#bin`). Este README documenta a arquitetura para quem for adicionar, remover ou alterar um comando.
|
|
4
|
+
|
|
5
|
+
## Estrutura
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
bin/
|
|
9
|
+
├── jarvis.js # Entrypoint (shebang). ~10 linhas, não cresce.
|
|
10
|
+
├── postinstall.js # Roda no `npm install` (sincroniza assets se já havia .{ide}/ no cwd)
|
|
11
|
+
├── commands/ # Um arquivo por comando. Lógica pura, zero commander.
|
|
12
|
+
│ ├── init.js, list.js, info.js, whoami.js, ...
|
|
13
|
+
│ ├── docs-sync.js, docs-publish.js
|
|
14
|
+
│ └── qa-signoff.js, install-rtk.js, tokens.js, map.js
|
|
15
|
+
└── lib/
|
|
16
|
+
├── cli/
|
|
17
|
+
│ ├── program.js # Único lugar que monta o commander — ver "Arquitetura"
|
|
18
|
+
│ └── shared-options.js # .option() repetidos entre comandos (--ide, --quiet, etc.)
|
|
19
|
+
├── vcs/ # Adapters de Git host (GitLab/GitHub/Bitbucket)
|
|
20
|
+
│ ├── api.js # Lógica HTTP real (createIssue, createMergeRequest, fetchRawFile)
|
|
21
|
+
│ ├── create-merge.js, create-issue.js, fetch-raw.js # função exportada + CLI direto (ver abaixo)
|
|
22
|
+
├── tasks/
|
|
23
|
+
│ └── comment.js # Adapter de task manager (jira/linear/github/asana) — mesmo padrão
|
|
24
|
+
├── config/ # ide-config.js (fonte de verdade de IDEs), constants.js
|
|
25
|
+
├── core/ # scanner.js, sync-engine.js, profile-filter.js, token-report.js
|
|
26
|
+
├── docs/ # central-docs: fetch/publish + validação de frontmatter
|
|
27
|
+
│ ├── validate-frontmatter.js # Valida/extrai frontmatter de PRD/FRD/ARD/RFC
|
|
28
|
+
│ ├── redis-cache.js # Cache best-effort via `redis-cli` (get/setex/del)
|
|
29
|
+
│ ├── fetch-file.js # fetchFile() — usado por `docs sync`/`docs fetch` e por publish-file.js
|
|
30
|
+
│ └── publish-file.js # publishFile() — usado por `docs publish`
|
|
31
|
+
├── utils/ # logger.js, ui.js, paths.js, frontmatter.js, git-parser.js, npmrc-parser.js
|
|
32
|
+
├── flow-map/ # `jarvis map` — grafo de chamadas entre workflows/skills/agents
|
|
33
|
+
├── auth/ # session.js (auth.json legado, hoje só `jarvis logout` o lê)
|
|
34
|
+
└── env-loader.js # Resolve e lê o ENV.md ($IDE/ENV.md)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Arquitetura: 3 camadas, cada uma com uma responsabilidade
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
bin/jarvis.js → entrypoint: cria o program e faz parseAsync(argv)
|
|
41
|
+
↓
|
|
42
|
+
bin/lib/cli/program.js → ÚNICO lugar que sabe que existe commander
|
|
43
|
+
↓ (chama, já com o `flags` remontado)
|
|
44
|
+
bin/commands/*.js → lógica de negócio pura: async (flags) => {...}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Por que separar assim?** `bin/commands/*.js` nunca importa `commander` nem sabe o que é um `Command`. Cada arquivo só recebe um objeto `flags` e faz o que precisa. Isso significa:
|
|
48
|
+
- Testar a lógica de um comando não exige simular argv/commander — chama a função direto com um objeto.
|
|
49
|
+
- Trocar de biblioteca de CLI um dia (se um dia fizer sentido) significa reescrever só `program.js`, não os 10 arquivos de comando.
|
|
50
|
+
- `program.js` é o **mapa completo** do CLI: para saber todo comando que existe, todas as flags que cada um aceita, é o único arquivo que precisa abrir.
|
|
51
|
+
|
|
52
|
+
## O adapter: commander → formato antigo de `flags`
|
|
53
|
+
|
|
54
|
+
O commander entrega ao `.action()` as opções em **camelCase** (`--env-file` → `options.envFile`, `--max-age` → `options.maxAge`) e cada positional como seu próprio parâmetro. As funções em `bin/commands/*.js` foram escritas para um objeto `flags` no formato que o parser manual antigo produzia: chaves com hífen literal (`flags["env-file"]`) e um array `flags._` para positionals.
|
|
55
|
+
|
|
56
|
+
Em vez de reescrever as 10 funções para o formato novo (risco maior, mexe em lógica que já funciona), `program.js` tem uma função `toLegacyFlags(options, extra)` que remonta o objeto no formato antigo antes de cada chamada:
|
|
57
|
+
|
|
58
|
+
```js
|
|
59
|
+
// bin/lib/cli/program.js
|
|
60
|
+
const whoamiCmd = cmd(program, "whoami").description("...");
|
|
61
|
+
withEnvOptions(withLogOptions(whoamiCmd)).action((options) => whoami(toLegacyFlags(options)));
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`toLegacyFlags` remapeia só as duas chaves que mudam de formato (`envFile`→`"env-file"`, `maxAge`→`"max-age"`); todo o resto passa direto. O `extra` (segundo argumento) serve para injetar positionals como `_` ou flags sintéticas como `{ logout: true }` (usado por `jarvis logout`, que chama a mesma função de `whoami.js` com essa flag).
|
|
65
|
+
|
|
66
|
+
**Ao adicionar uma opção nova que usa hífen** (ex: `--body-file`), decida: se a função de `bin/commands/*.js` vai ler `flags["body-file"]` (formato antigo) ou se você vai atualizá-la para ler `options.bodyFile` direto. Os 4 comandos novos (`vcs create-merge`, `vcs create-issue`, etc.) já usam o segundo caminho — passam o objeto de opções do commander quase direto, sem o adapter — porque não têm lógica legada para preservar.
|
|
67
|
+
|
|
68
|
+
## O helper `cmd()` — por que todo comando passa por ele
|
|
69
|
+
|
|
70
|
+
```js
|
|
71
|
+
function cmd(parent, name) {
|
|
72
|
+
return parent.command(name).allowUnknownOption().allowExcessArguments();
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
O parser manual antigo nunca validava nada: qualquer `--flag` era aceito e ignorado silenciosamente se o comando não o lesse. O commander, por padrão, dá erro em flag não declarada e em positional excedente. `allowUnknownOption()`/`allowExcessArguments()` replicam a permissividade antiga — mas **o commander não propaga essas duas configs do comando pai para os subcomandos**: setar só no `program` raiz não é suficiente (testado e confirmado durante a implementação). Por isso `cmd()` existe e **todo** comando — incluindo os aninhados (`docs sync`, `vcs create-merge`) — é criado com ele, nunca com `.command()` direto.
|
|
77
|
+
|
|
78
|
+
## Argumentos: `[opcional]`, não `<obrigatório>` — de propósito
|
|
79
|
+
|
|
80
|
+
Note que `info`, `vcs fetch-raw` e `tasks comment` declaram seus positionals como **opcionais** (`[target]`, `[file-path]`) mesmo sendo, na prática, obrigatórios para o comando funcionar. Isso é deliberado: se o commander validar "argumento obrigatório ausente" sozinho, ele intercepta **antes** da função rodar — e cada uma dessas funções já tem sua própria validação com mensagem de uso customizada e mais específica (`info.js`: `"❌ Uso incorreto\nUso: jarvis info <type/name>\nExemplo: ..."`). Deixar o positional opcional no commander e a validação dentro da função preserva essa mensagem.
|
|
81
|
+
|
|
82
|
+
**A mesma regra vale para `--flag` que já tem validação própria.** Nenhum comando aqui usa `.requiredOption()` ou `.choices()` do commander, mesmo quando faria sentido à primeira vista (ex: `--tipo` em `docs publish` só aceita `prd|frd|ard|rfc|swagger|qa-report`). `docsPublish.js` já valida isso e mostra um bloco de exemplos de uso bem mais rico que o que o commander mostraria. Usar `.choices()` ali faria o commander interceptar o valor errado com uma mensagem genérica, perdendo esse texto. **Ao adicionar uma opção nova**: se a função já vai validar o valor por dentro, deixe o commander permissivo (`.option()` simples) e confie na validação interna. Se não há validação nenhuma hoje, `.choices()`/`.argParser()` são bons lugares para adicionar uma — não há essa perda a proteger.
|
|
83
|
+
|
|
84
|
+
## `program.command()` vs `program.addCommand()`
|
|
85
|
+
|
|
86
|
+
Este código usa `.command(nome)` (que cria e já anexa o subcomando) em todo lugar — não `.addCommand(instanciaDeCommand)`. São equivalentes; `.addCommand()` só compensa quando o `Command` é montado em outro módulo e precisa ser importado antes de anexar. Como tudo mora em `program.js`, não há motivo para o nível extra de indireção.
|
|
87
|
+
|
|
88
|
+
## Os 4 "scripts standalone" (`vcs/*.js`, `tasks/comment.js`): dupla forma
|
|
89
|
+
|
|
90
|
+
`create-merge.js`, `create-issue.js`, `fetch-raw.js` e `comment.js` são chamados de duas formas:
|
|
91
|
+
|
|
92
|
+
1. **Como subcomando do CLI**: `jarvis vcs create-merge --source ... --target ...` (via `program.js`)
|
|
93
|
+
2. **Direto, por skills/workflows que ainda shell-am pra eles**: `node bin/lib/vcs/create-merge.js --source ...`
|
|
94
|
+
|
|
95
|
+
Cada um dos 4 arquivos segue o mesmo padrão: exporta uma função (`runCreateMerge`, `runCreateIssue`, `runFetchRaw`, `runComment`) com a lógica, e termina com um guard que só lê `process.argv` quando o arquivo é executado diretamente:
|
|
96
|
+
|
|
97
|
+
```js
|
|
98
|
+
// Compatibilidade: continua funcionando como `node bin/lib/vcs/create-merge.js --source ...`
|
|
99
|
+
if (fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
100
|
+
await runCreateMerge({ source: arg("source"), ... });
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Ao editar um desses 4 arquivos**: a lógica de negócio fica dentro da função exportada. O bloco de `arg()`/guard no final é só para quem ainda invoca via `node bin/lib/.../arquivo.js` direto (uso legado — todo caller novo deve preferir o subcomando `jarvis`). Não remova o guard sem primeiro confirmar que nenhuma skill/workflow ainda referencia o path direto (`grep -rn "bin/lib/vcs\|bin/lib/tasks/comment" --include="*.md" .`).
|
|
105
|
+
|
|
106
|
+
## Como adicionar um comando novo
|
|
107
|
+
|
|
108
|
+
1. Criar `bin/commands/meu-comando.js` exportando `export async function meuComando(flags) { ... }` — igual aos outros, sem importar `commander`.
|
|
109
|
+
2. Em `bin/lib/cli/program.js`:
|
|
110
|
+
- Importar a função no topo.
|
|
111
|
+
- Registrar com `cmd(program, "meu-comando")` (ou `cmd(parentExistente, "nome")` se for subcomando de um grupo como `docs`/`vcs`/`tasks`).
|
|
112
|
+
- Declarar as opções/positionals com `.option()`/`.argument()`. Usar `withEnvOptions()`/`withLogOptions()` de `shared-options.js` se o comando precisar de `--ide`/`--env-file` ou `--quiet`/`--verbose`/`--silent`.
|
|
113
|
+
- No `.action()`, chamar `toLegacyFlags(options, extra)` se a função usa o formato antigo de flags, ou passar `options` quase direto se for um comando novo sem lógica legada (ver os 4 de `vcs`/`tasks` como exemplo).
|
|
114
|
+
3. Rodar manualmente o comando novo e **todos os outros** (não há suíte automatizada de CLI end-to-end — só `test/comandos-docs.test.js`, que valida a documentação dos workflows/skills, não o comportamento do CLI em si). Checklist mínimo: `--help` do comando novo, caminho feliz, caminho de erro (flag/argumento faltando).
|
|
115
|
+
4. `npm run lint && npm run test:comandos && npm run test:filtro` antes de comitar.
|
|
116
|
+
|
|
117
|
+
## Variáveis de ambiente lidas diretamente (fora do ENV.md)
|
|
118
|
+
|
|
119
|
+
`bin/lib/tasks/comment.js` e `bin/lib/vcs/*.js` leem `process.env` direto (`TASK_MANAGER`, `TOKEN_TASK_MANAGER`, `CENTRAL_DOCS_REPO`, `VERSION_CONTROL`, etc.) — não passam pelo `env-loader.js`/ENV.md. Isso é intencional: esses adapters são chamados por skills/workflows que já exportam essas variáveis do `ENV.md` para o processo (`set -a; eval "$(grep ... $IDE/ENV.md)"; set +a`) antes de invocar o comando. Se um comando novo precisar ler o `ENV.md` diretamente, use `env-loader.js#resolveEnvPath`/`loadEnv` (ver `whoami.js`, `tokens.js`, `qa-signoff.js` como exemplo) em vez de `process.env`.
|
|
120
|
+
|
|
121
|
+
## Testes
|
|
122
|
+
|
|
123
|
+
- `npm run test:comandos` — valida que toda referência a comando/skill nos workflows e skills existe de fato (não testa o CLI em runtime).
|
|
124
|
+
- `npm run test:filtro` — testes unitários de `profile-filter.js`, `token-report.js`, `flow-map`, `env-loader.js`, `sync-engine.js` e `vcs/api.js`.
|
|
125
|
+
- Não há teste automatizado de ponta a ponta do CLI (`jarvis <comando>` real) — a camada de dispatch (`program.js`, `bin/commands/*.js`) não é cobrida pelos testes unitários. Qualquer mudança ali precisa de validação manual dos comandos afetados.
|
|
126
|
+
|
|
127
|
+
### Como testar código que lê `fs`/rede sem mockar módulo
|
|
128
|
+
|
|
129
|
+
Os 3 arquivos mais críticos sem cobertura até pouco tempo atrás (`env-loader.js`, `sync-engine.js`, `vcs/api.js`) tocam filesystem real ou rede real — nenhum foi refatorado para isso, cada um usou o hook que já existia:
|
|
130
|
+
|
|
131
|
+
- **`env-loader.js`** (e `flow-map.test.js`, mais antigo): `mkdtempSync(join(tmpdir(), "jarvis-..."))` monta um workspace fake com `.{ide}/ENV.md`, roda a função contra ele, `rmSync` no `finally`.
|
|
132
|
+
- **`sync-engine.js`**: `getFrameworkRoot()` (`utils/paths.js`) já tem um escape hatch — `process.env.JARVIS_ROOT`, se definido e existir, vence sobre o framework real. O teste aponta `JARVIS_ROOT` para um fixture mínimo (`agents/`, `skills/`, etc. com 1 arquivo cada) em vez de sincronizar o framework inteiro.
|
|
133
|
+
- **`vcs/api.js`**: usa `mock.method(globalThis, "fetch", ...)` do `node:test` pra controlar a resposta por vendor, sem mockar o módulo nem tocar rede real. **Atenção**: toda função de rede chama `getVcsToken()` antes do fetch — fixe `GITLAB_TOKEN`/`GITHUB_TOKEN`/`BITBUCKET_TOKEN` via env var no teste (ver `withEnv` em `vcs-api.test.js`), senão o resultado depende do que a máquina que roda o teste tiver em `.npmrc`/`gh auth`.
|
|
134
|
+
- **`docs/fetch-file.js`/`docs/publish-file.js`**: mesmo mock de `fetch`. `redis-cli` (chamado por `docs/redis-cache.js`) **não dá pra mockar** — é um módulo nativo (`node:child_process`) não configurável, `mock.method` lança `TypeError: Cannot redefine property`. Como pode haver um `redis-cli` de verdade instalado (com ou sem servidor acessível) na máquina que roda o teste, cada teste usa uma chave de cache única (`docs:${randomUUID()}...`) em vez de mockar o cache — garante cache-miss determinístico sem depender do estado de nenhum Redis real.
|
|
135
|
+
|
|
136
|
+
**Armadilha com `async`**: o helper `withEnv(vars, fn)` (repetido nos 3 arquivos acima) precisa de `return **await** fn()`, não `return fn()`, dentro do `try`. Sem o `await`, o `finally` que restaura a env var roda assim que `fn()` retorna uma Promise pendente — ou seja, **antes** da função terminar. Isso só não quebra quando a leitura da env var acontece antes do primeiro `await` de `fn` (ex: `fetchRawFile` lê o token antes do seu próprio `fetch`); quebra silenciosamente em qualquer função com mais de um `await` no meio do caminho (ex: `publishFile`, que busca o `index.md` antes de chegar no commit, que é onde o token é lido).
|
|
137
|
+
|
|
138
|
+
Ao escrever um teste novo para um arquivo que toca `fs`/rede, prefira um desses padrões a mockar o módulo inteiro ou refatorar pra injeção de dependência — nenhum dos arquivos acima precisou mudar uma linha de lógica de produção para ganhar teste.
|
|
139
|
+
|
|
140
|
+
## Lint e formatação
|
|
141
|
+
|
|
142
|
+
`eslint.config.js` (raiz) + `.prettierrc.json` cobrem `bin/` e `test/`. `npm run lint` / `npm run format` — ver `package.json#scripts`.
|