jarvis-ai-framework 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +416 -0
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/agents/AGENTS.md +234 -0
- package/agents/README.md +309 -0
- package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
- package/agents/engineering/eng.agent.md +303 -0
- package/agents/engineering/eng.bug-hunter.md +386 -0
- package/agents/engineering/eng.cybersecurity.agent.md +503 -0
- package/agents/engineering/eng.dev-code-reviewer.md +148 -0
- package/agents/engineering/eng.docs-writer.md +152 -0
- package/agents/engineering/eng.frontend.agent.md +117 -0
- package/agents/engineering/eng.rpa.agent.md +215 -0
- package/agents/engineering/eng.tech-analyst.agent.md +102 -0
- package/agents/engineering/eng.ux-designer.agent.md +193 -0
- package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
- package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
- package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
- package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
- package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
- package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
- package/agents/product/prod.pm-checker.md +52 -0
- package/bin/commands/docs-publish.js +184 -0
- package/bin/commands/docs-sync.js +139 -0
- package/bin/commands/info.js +87 -0
- package/bin/commands/init.js +237 -0
- package/bin/commands/install-rtk.js +90 -0
- package/bin/commands/list.js +48 -0
- package/bin/commands/qa-signoff.js +112 -0
- package/bin/commands/whoami.js +43 -0
- package/bin/jarvis.js +159 -0
- package/bin/lib/auth/session.js +56 -0
- package/bin/lib/config/constants.js +123 -0
- package/bin/lib/config/ide-config.js +233 -0
- package/bin/lib/core/scanner.js +124 -0
- package/bin/lib/core/sync-engine.js +551 -0
- package/bin/lib/docs/fetch-file.sh +41 -0
- package/bin/lib/docs/publish-file.sh +284 -0
- package/bin/lib/docs/validate-frontmatter.js +157 -0
- package/bin/lib/env-loader.js +198 -0
- package/bin/lib/tasks/comment.js +131 -0
- package/bin/lib/utils/git-parser.js +145 -0
- package/bin/lib/utils/logger.js +104 -0
- package/bin/lib/utils/npmrc-parser.js +106 -0
- package/bin/lib/utils/paths.js +55 -0
- package/bin/lib/utils/ui.js +59 -0
- package/bin/lib/vcs/api.js +312 -0
- package/bin/lib/vcs/create-issue.js +43 -0
- package/bin/lib/vcs/create-merge.js +43 -0
- package/bin/lib/vcs/fetch-raw.js +30 -0
- package/bin/postinstall.js +41 -0
- package/members.md +25 -0
- package/package.json +55 -0
- package/rules/AGENTS.md +205 -0
- package/rules/engineering/data/data-rules.md +200 -0
- package/rules/engineering/eng-rules.md +243 -0
- package/rules/engineering/eng-security-rules.md +186 -0
- package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
- package/rules/engineering/eng.bump-rules.md +27 -0
- package/rules/engineering/eng.docs-scraping-rules.md +64 -0
- package/rules/engineering/eng.downstream-flow-rules.md +297 -0
- package/rules/engineering/eng.integrations-rules.md +73 -0
- package/rules/engineering/eng.plan-rules.md +333 -0
- package/rules/engineering/eng.pr-rules.md +359 -0
- package/rules/engineering/eng.pre-pr-rules.md +103 -0
- package/rules/engineering/eng.start-rules.md +246 -0
- package/rules/engineering/eng.tech-spec-rules.md +968 -0
- package/rules/engineering/eng.work-rules.md +312 -0
- package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
- package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
- package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
- package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
- package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
- package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
- package/rules/product/README.md +24 -0
- package/rules/product/prod-rules.md +151 -0
- package/rules/rtk-rules.md +68 -0
- package/skills/AGENTS.md +290 -0
- package/skills/SKILLS-ROADMAP.md +333 -0
- package/skills/churn-audit/SKILL.md +385 -0
- package/skills/context-detect/SKILL.md +399 -0
- package/skills/context-detect/assets/context-profile-template.md +127 -0
- package/skills/docs-central/README.md +310 -0
- package/skills/docs-central/SKILL.md +423 -0
- package/skills/docs-index/SKILL.md +377 -0
- package/skills/eng-ai-engineer/SKILL.md +296 -0
- package/skills/eng-arch-c4/SKILL.md +358 -0
- package/skills/eng-arch-c4/assets/example-code.md +189 -0
- package/skills/eng-arch-c4/assets/example-component.md +105 -0
- package/skills/eng-arch-c4/assets/example-container.md +104 -0
- package/skills/eng-arch-c4/assets/example-context.md +81 -0
- package/skills/eng-backend/SKILL.md +776 -0
- package/skills/eng-browser-extension-builder/SKILL.md +385 -0
- package/skills/eng-cybersecurity/SKILL.md +645 -0
- package/skills/eng-data-bi/SKILL.md +199 -0
- package/skills/eng-data-debug/SKILL.md +307 -0
- package/skills/eng-data-engineer/SKILL.md +256 -0
- package/skills/eng-data-onboard/SKILL.md +310 -0
- package/skills/eng-data-orchestrator/SKILL.md +426 -0
- package/skills/eng-design-system/SKILL.md +619 -0
- package/skills/eng-docs-write/SKILL.md +312 -0
- package/skills/eng-frontend/SKILL.md +913 -0
- package/skills/eng-jira-comment/SKILL.md +17 -0
- package/skills/eng-microfrontend/SKILL.md +602 -0
- package/skills/eng-ms-trace/SKILL.md +469 -0
- package/skills/eng-nestjs/SKILL.md +791 -0
- package/skills/eng-performance-engineer/SKILL.md +312 -0
- package/skills/eng-pr/SKILL.md +339 -0
- package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
- package/skills/eng-qa-bug-report/SKILL.md +1088 -0
- package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
- package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
- package/skills/eng-qa-dev-guide/SKILL.md +164 -0
- package/skills/eng-qa-e2e/SKILL.md +400 -0
- package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
- package/skills/eng-qa-exploratory/SKILL.md +188 -0
- package/skills/eng-qa-gate/SKILL.md +370 -0
- package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
- package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
- package/skills/eng-qa-quality-report/SKILL.md +412 -0
- package/skills/eng-qa-test-plan/SKILL.md +466 -0
- package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
- package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
- package/skills/eng-qa-testsprite/SKILL.md +325 -0
- package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
- package/skills/eng-qa-unit-test/SKILL.md +471 -0
- package/skills/eng-rabbitmq/SKILL.md +661 -0
- package/skills/eng-scraper/SKILL.md +683 -0
- package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
- package/skills/eng-security-patch/SKILL.md +378 -0
- package/skills/eng-security-triage/SKILL.md +266 -0
- package/skills/eng-task-comment/SKILL.md +60 -0
- package/skills/eng-tech-analyst/SKILL.md +529 -0
- package/skills/eng-threat-model/SKILL.md +161 -0
- package/skills/init-jarvis/SKILL.md +1304 -0
- package/skills/init-jarvis/assets/mcp-configs.md +389 -0
- package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
- package/skills/init-jarvis/assets/setup-guide.md +360 -0
- package/skills/lovable-prompt-generator/SKILL.md +304 -0
- package/skills/prod-roadmap-report/README.md +303 -0
- package/skills/prod-roadmap-report/SKILL.md +198 -0
- package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
- package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
- package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
- package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
- package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
- package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
- package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
- package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
- package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
- package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
- package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
- package/skills/prod-specs/SKILL.md +108 -0
- package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
- package/skills/prod-specs/references/prod.spec.epic.md +107 -0
- package/skills/prod-specs/references/prod.spec.frd.md +135 -0
- package/skills/prod-specs/references/prod.spec.issue.md +145 -0
- package/skills/prod-specs/references/prod.spec.prd.md +118 -0
- package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
- package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
- package/skills/prod-specs/templates/prod-epic-template.md +76 -0
- package/skills/prod-specs/templates/prod-frd-template.md +172 -0
- package/skills/prod-specs/templates/prod-issue-template.md +68 -0
- package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
- package/skills/prod-specs/templates/prod-prd-template.md +173 -0
- package/skills/prod-specs-update/SKILL.md +272 -0
- package/skills/report-issue/SKILL.md +156 -0
- package/taxonomy.md +270 -0
- package/templates/AGENTS.md +189 -0
- package/templates/CDD aplicado a Prompts.md +182 -0
- package/templates/ENV-template.md +187 -0
- package/templates/engineering/AGENTS-template.md +71 -0
- package/templates/engineering/ARD-template.md +193 -0
- package/templates/engineering/CONTACTS-template.md +135 -0
- package/templates/engineering/PR-template.md +40 -0
- package/templates/engineering/RFC-Playbook.md +325 -0
- package/templates/engineering/RFC-template.md +199 -0
- package/templates/engineering/architecture-template.md +277 -0
- package/templates/engineering/breakdown-subtasks-template.md +582 -0
- package/templates/engineering/c4-model-template.md +516 -0
- package/templates/engineering/data-contract-template.md +135 -0
- package/templates/engineering/data-pipeline-template.md +163 -0
- package/templates/engineering/plan-template.md +255 -0
- package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
- package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
- package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
- package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
- package/templates/engineering/qa/qa.quality-report-template.md +130 -0
- package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
- package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
- package/templates/engineering/swagger-template.md +145 -0
- package/templates/engineering/tech-spec-template.md +497 -0
- package/templates/engineering/work-progress-template.md +155 -0
- package/workflows/AGENTS.md +240 -0
- package/workflows/README.md +160 -0
- package/workflows/all-tools.md +11 -0
- package/workflows/engineering/data/data.contract.md +202 -0
- package/workflows/engineering/data/data.new-pipeline.md +234 -0
- package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
- package/workflows/engineering/eng.bug-audit.md +591 -0
- package/workflows/engineering/eng.build-tech-spec.md +1116 -0
- package/workflows/engineering/eng.create-ard-from-code.md +259 -0
- package/workflows/engineering/eng.create-ard.md +382 -0
- package/workflows/engineering/eng.create-rfc.md +245 -0
- package/workflows/engineering/eng.debug.md +479 -0
- package/workflows/engineering/eng.docs.md +40 -0
- package/workflows/engineering/eng.light-arch.md +84 -0
- package/workflows/engineering/eng.plan.md +213 -0
- package/workflows/engineering/eng.pr.md +466 -0
- package/workflows/engineering/eng.pre-pr.md +167 -0
- package/workflows/engineering/eng.review.md +185 -0
- package/workflows/engineering/eng.rpa.robot.md +342 -0
- package/workflows/engineering/eng.security-audit.md +312 -0
- package/workflows/engineering/eng.security-incident.md +275 -0
- package/workflows/engineering/eng.security-pipeline.md +210 -0
- package/workflows/engineering/eng.security-review.md +235 -0
- package/workflows/engineering/eng.start.md +494 -0
- package/workflows/engineering/eng.work.md +558 -0
- package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
- package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
- package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
- package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
- package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
- package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
- package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
- package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
- package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
- package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
- package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
- package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
- package/workflows/product/prod.roadmap.preview.md +110 -0
- package/workflows/product/prod.spec.breakdown.md +163 -0
- package/workflows/product/prod.spec.clarify.md +178 -0
- package/workflows/product/prod.spec.epic.md +154 -0
- package/workflows/product/prod.spec.frd.md +96 -0
- package/workflows/product/prod.spec.issue.md +145 -0
- package/workflows/product/prod.spec.md +60 -0
- package/workflows/product/prod.spec.prd.md +100 -0
- package/workflows/taxonomy.md +92 -0
- package/workflows/warm-up.md +574 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-qa-graphql-contract
|
|
3
|
+
description: Gera testes de contrato que validam queries/mutations GraphQL do frontend contra o schema do BFF. Se o schema mudar, o teste quebra antes do deploy.
|
|
4
|
+
argument-hint: "{path-do-schema} [path-das-queries]"
|
|
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
|
+
---
|
|
13
|
+
|
|
14
|
+
# qa-graphql-contract
|
|
15
|
+
|
|
16
|
+
Você é um especialista em testes de contrato GraphQL. Sua função é gerar testes
|
|
17
|
+
que validam a compatibilidade entre queries/mutations do frontend e o schema
|
|
18
|
+
do BFF, garantindo que mudanças no schema sejam detectadas antes do deploy.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Objetivo
|
|
23
|
+
|
|
24
|
+
Criar arquivo de teste (Jest/Vitest) que importa o schema GraphQL do BFF,
|
|
25
|
+
parseia todas as queries do frontend e valida cada uma contra o schema.
|
|
26
|
+
Se o BFF remover um campo ou mudar um tipo, o teste quebra no CI.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Entrada
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
/qa-graphql-contract {path-do-schema} [path-das-queries]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- `path-do-schema` (obrigatório) — caminho para o schema GraphQL do BFF
|
|
37
|
+
- Arquivo `.graphql` / `.gql`
|
|
38
|
+
- Arquivo `.ts` / `.js` que exporta o schema (SDL string ou `DocumentNode`)
|
|
39
|
+
- URL de introspection (ex: `http://localhost:4000/graphql`)
|
|
40
|
+
- `path-das-queries` (opcional) — diretório com queries do frontend
|
|
41
|
+
- Default: detectar automaticamente (`src/**/*.graphql`, `src/**/*.gql`, ou queries inline em `gql` tagged templates)
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Recursos
|
|
46
|
+
|
|
47
|
+
| Recurso | Caminho |
|
|
48
|
+
|---------|---------|
|
|
49
|
+
| Schema do BFF | argumento do usuário (local ou URL) |
|
|
50
|
+
| Queries do frontend | `src/**/*.graphql`, `src/**/*.gql`, ou inline em `src/**/*.ts` |
|
|
51
|
+
| Config de testes | `jest.config.*`, `vitest.config.*` |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Pré-requisito
|
|
56
|
+
|
|
57
|
+
1. **ENV.md** válido
|
|
58
|
+
2. **Schema GraphQL acessível** (arquivo local, repo clonado, ou endpoint de introspection)
|
|
59
|
+
3. **Queries GraphQL no frontend** (arquivos `.graphql` ou tagged templates `gql`)
|
|
60
|
+
4. **Pacote `graphql`** instalado no projeto (peer dependency)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Quando Usar
|
|
65
|
+
|
|
66
|
+
**Usar quando:**
|
|
67
|
+
- Frontend consome API GraphQL de um BFF/backend separado
|
|
68
|
+
- Mudanças no schema do BFF já quebraram o frontend em produção
|
|
69
|
+
- Sprint inclui alterações no schema GraphQL
|
|
70
|
+
- Onboarding de contract testing em projeto existente
|
|
71
|
+
|
|
72
|
+
**NÃO usar quando:**
|
|
73
|
+
- Frontend usa REST (não GraphQL)
|
|
74
|
+
- Frontend e BFF estão no mesmo repo com code generation (ex: graphql-codegen já valida)
|
|
75
|
+
- Objetivo é testar resolvers do BFF (isso é teste de integração do backend)
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Padrões Críticos
|
|
80
|
+
|
|
81
|
+
1. **Schema como source of truth** — o schema do BFF define o contrato; queries que não conformam são bugs do frontend
|
|
82
|
+
2. **Cobertura de 100% das queries** — o teste deve validar TODAS as queries/mutations, não apenas algumas
|
|
83
|
+
3. **Test de cobertura reverso** — detectar queries novas que escaparam da validação
|
|
84
|
+
4. **Cross-repo tolerante** — o schema pode vir de arquivo local, repo externo ou introspection
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Fluxo de Trabalho
|
|
89
|
+
|
|
90
|
+
### Fase 1 — Obter schema
|
|
91
|
+
|
|
92
|
+
**1.1** Determinar fonte do schema:
|
|
93
|
+
|
|
94
|
+
- **Arquivo local**: ler diretamente
|
|
95
|
+
```bash
|
|
96
|
+
cat {path-do-schema}
|
|
97
|
+
```
|
|
98
|
+
- **URL de introspection**: executar query de introspection
|
|
99
|
+
```bash
|
|
100
|
+
curl -s -X POST {url} \
|
|
101
|
+
-H "Content-Type: application/json" \
|
|
102
|
+
-d '{"query": "{ __schema { types { name kind fields { name type { name kind ofType { name } } } } } }"}'
|
|
103
|
+
```
|
|
104
|
+
- **Arquivo TypeScript**: detectar se exporta SDL string ou DocumentNode
|
|
105
|
+
|
|
106
|
+
**1.2** Validar que o schema é parseável:
|
|
107
|
+
```javascript
|
|
108
|
+
const { buildSchema, parse } = require('graphql');
|
|
109
|
+
buildSchema(schemaSDL); // deve funcionar sem erros
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Fase 2 — Descobrir queries do frontend
|
|
113
|
+
|
|
114
|
+
**2.1** Buscar arquivos de query (usar `path-das-queries` se fornecido, senão detectar raiz do projeto):
|
|
115
|
+
```bash
|
|
116
|
+
find {path-das-queries ou raiz do projeto} -name "*.graphql" -o -name "*.gql" 2>/dev/null
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**2.2** Buscar queries inline (tagged templates `gql`):
|
|
120
|
+
```bash
|
|
121
|
+
grep -rl "gql\`" {path-das-queries ou raiz do projeto} --include="*.ts" --include="*.tsx"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**2.3** Para cada fonte, extrair o conteúdo da query/mutation.
|
|
125
|
+
|
|
126
|
+
**2.4** Reportar:
|
|
127
|
+
```
|
|
128
|
+
Schema: {fonte} ({N} types, {M} fields)
|
|
129
|
+
Queries encontradas: {Q} queries, {Mu} mutations, {F} fragments
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Fase 3 — Gerar teste de contrato
|
|
133
|
+
|
|
134
|
+
**3.1** Criar arquivo de teste:
|
|
135
|
+
```
|
|
136
|
+
{$TEST_FOLDER}/contracts/graphql-contract.spec.ts
|
|
137
|
+
```
|
|
138
|
+
> Se `$TEST_FOLDER` não definido, usar `src/__tests__/contracts/`
|
|
139
|
+
|
|
140
|
+
**3.2** Estrutura do teste:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
import { buildSchema, parse, validate } from 'graphql';
|
|
144
|
+
import fs from 'fs';
|
|
145
|
+
|
|
146
|
+
// Schema do BFF
|
|
147
|
+
const schemaSDL = fs.readFileSync('{path-do-schema}', 'utf-8');
|
|
148
|
+
const schema = buildSchema(schemaSDL);
|
|
149
|
+
|
|
150
|
+
// Queries do frontend
|
|
151
|
+
const queries: Record<string, string> = {
|
|
152
|
+
'{nome-da-query}': fs.readFileSync('{path-da-query}', 'utf-8'),
|
|
153
|
+
// ... todas as queries
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
describe('Contrato GraphQL — Frontend vs BFF', () => {
|
|
157
|
+
Object.entries(queries).forEach(([name, source]) => {
|
|
158
|
+
it(`query "${name}" é compatível com o schema do BFF`, () => {
|
|
159
|
+
const document = parse(source);
|
|
160
|
+
const errors = validate(schema, document);
|
|
161
|
+
expect(errors).toEqual([]);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('todas as queries do frontend estão cobertas', () => {
|
|
166
|
+
const queryFiles = fs.readdirSync('{dir-queries}')
|
|
167
|
+
.filter(f => f.endsWith('.graphql') || f.endsWith('.gql'));
|
|
168
|
+
const testedQueries = Object.keys(queries);
|
|
169
|
+
const missing = queryFiles.filter(f => !testedQueries.includes(f));
|
|
170
|
+
expect(missing).toEqual([]);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**3.3** Adaptar imports e paths conforme framework de teste (Jest vs Vitest) e module system (ESM vs CJS).
|
|
176
|
+
|
|
177
|
+
### Fase 4 — Executar e reportar
|
|
178
|
+
|
|
179
|
+
**4.1** Executar o teste usando o runner detectado na Fase 1:
|
|
180
|
+
```bash
|
|
181
|
+
# Jest
|
|
182
|
+
npx jest --testPathPattern="graphql-contract" --no-coverage
|
|
183
|
+
# Vitest
|
|
184
|
+
npx vitest run graphql-contract
|
|
185
|
+
```
|
|
186
|
+
> Usar o runner que o projeto já utiliza — nunca forçar um runner diferente.
|
|
187
|
+
|
|
188
|
+
**4.2** Para cada falha, gerar report:
|
|
189
|
+
|
|
190
|
+
```markdown
|
|
191
|
+
### Query incompatível: {nome}
|
|
192
|
+
|
|
193
|
+
**Erro:** {mensagem do validate}
|
|
194
|
+
**Campo problemático:** `{field}` no type `{type}`
|
|
195
|
+
**Ação:** verificar se o schema do BFF ainda expõe este campo
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**4.3** Resumo:
|
|
199
|
+
```
|
|
200
|
+
── GraphQL Contract ──────────────────────────────────────
|
|
201
|
+
Schema : {fonte}
|
|
202
|
+
Queries : {Q} validadas
|
|
203
|
+
Compatíveis : {OK}
|
|
204
|
+
Incompatíveis: {FAIL}
|
|
205
|
+
Cobertura : {Q}/{total} queries cobertas
|
|
206
|
+
──────────────────────────────────────────────────────────
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Regras
|
|
212
|
+
|
|
213
|
+
### Nunca
|
|
214
|
+
- Modificar o schema do BFF — o contrato pertence ao backend
|
|
215
|
+
- Ignorar queries inline (tagged templates) — são tão importantes quanto arquivos `.graphql`
|
|
216
|
+
- Hardcodar paths de schema ou queries — receber como argumento
|
|
217
|
+
- Gerar teste que depende de runtime do BFF (deve funcionar offline com schema estático)
|
|
218
|
+
|
|
219
|
+
### Sempre
|
|
220
|
+
- Validar 100% das queries encontradas
|
|
221
|
+
- Incluir teste de cobertura reverso (queries novas detectadas)
|
|
222
|
+
- Sugerir correção para queries incompatíveis
|
|
223
|
+
- Reportar fonte do schema e método de obtenção
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Checklist de Conclusão
|
|
228
|
+
|
|
229
|
+
- [ ] Schema obtido e validado
|
|
230
|
+
- [ ] Queries do frontend descobertas (arquivos + inline)
|
|
231
|
+
- [ ] Teste de contrato gerado
|
|
232
|
+
- [ ] Teste de cobertura reverso incluído
|
|
233
|
+
- [ ] Testes executados
|
|
234
|
+
- [ ] Incompatibilidades reportadas com sugestões
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Output
|
|
239
|
+
|
|
240
|
+
| Artefato | Destino |
|
|
241
|
+
|----------|---------|
|
|
242
|
+
| Teste de contrato | `{$TEST_FOLDER}/contracts/graphql-contract.spec.ts` |
|
|
243
|
+
| Report de incompatibilidades | Output no terminal |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Mensagem de Conclusão
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
── qa-graphql-contract concluído ─────────────────────────
|
|
251
|
+
Schema : {fonte}
|
|
252
|
+
Queries : {Q} validadas ({OK} ok, {FAIL} incompatíveis)
|
|
253
|
+
Cobertura : {Q}/{total}
|
|
254
|
+
Teste em : {path do arquivo gerado}
|
|
255
|
+
──────────────────────────────────────────────────────────
|
|
256
|
+
```
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-qa-quality-report
|
|
3
|
+
description: >
|
|
4
|
+
Consolida sessões exploratórias, bug reports e quality gates de um período (sprint ou release)
|
|
5
|
+
e gera relatório de qualidade em markdown pronto para publicar via docs-central.
|
|
6
|
+
Pressupõe que as skills qa-exploratory, qa-cypress-e2e e qa-gate tenham sido usadas no período.
|
|
7
|
+
Trigger: Use quando precisar gerar o relatório de qualidade de uma sprint ou release.
|
|
8
|
+
license: AGPL-3.0
|
|
9
|
+
compatibility: Designed for Claude Code (or similar products)
|
|
10
|
+
allowed-tools: Read Write Edit Grep Glob Bash
|
|
11
|
+
metadata:
|
|
12
|
+
author: jarvis-framework
|
|
13
|
+
version: "1.0"
|
|
14
|
+
argument-hint: "[Sprint N | Release X.Y | mês YYYY-MM]"
|
|
15
|
+
disable-model-invocation: false
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# QA Quality Report — Relatório de Qualidade Consolidado
|
|
19
|
+
|
|
20
|
+
Você é um **QA Engineer** responsável por consolidar as evidências de qualidade de um período
|
|
21
|
+
e transformá-las em um relatório objetivo, rastreável e pronto para stakeholders.
|
|
22
|
+
|
|
23
|
+
> ⚠️ **Pré-condição**: esta skill assume que sessões exploratórias, quality gates e bug reports
|
|
24
|
+
> do período foram gerados pelas skills `qa-exploratory`, `qa-gate` e `qa-bug-report`.
|
|
25
|
+
> Se nenhum dado existir, a skill irá informar o usuário e gerar um relatório em branco.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Entrada
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
#$ARGUMENTS
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Aceita: período em texto livre.
|
|
36
|
+
|
|
37
|
+
Exemplos válidos:
|
|
38
|
+
- `Sprint 42`
|
|
39
|
+
- `release 1.4`
|
|
40
|
+
- `abril/2026`
|
|
41
|
+
- `2026-04` (formato ISO)
|
|
42
|
+
|
|
43
|
+
**Se não receber argumentos**, perguntar:
|
|
44
|
+
```
|
|
45
|
+
Qual período deseja cobrir no relatório?
|
|
46
|
+
Exemplos: Sprint 42 · release 1.4 · abril/2026
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Recursos
|
|
52
|
+
|
|
53
|
+
- **Template**: `$TEMPLATES_FOLDER/engineering/qa/qa.quality-report-template.md`
|
|
54
|
+
- **Sessões exploratórias**: `$SESSIONS_DIR/qa/`
|
|
55
|
+
- **Relatórios anteriores**: `$DOCS_FOLDER/engineering/qa/reports/`
|
|
56
|
+
- **Test backlog**: `$DOCS_FOLDER/engineering/qa/test-backlog.md`
|
|
57
|
+
- **Suite de testes E2E**: `$TEST_FOLDER`
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Pré-requisito
|
|
62
|
+
|
|
63
|
+
Validar ENV.md antes de executar:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
if [ ! -f "$IDE/ENV.md" ]; then
|
|
67
|
+
echo "⚠️ ENV.md não encontrado. Execute /init-jarvis primeiro."
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
SQUAD=$(grep "^SQUAD=" "$IDE/ENV.md" | cut -d= -f2)
|
|
72
|
+
DOCS_FOLDER=$(grep "^DOCS_FOLDER=" "$IDE/ENV.md" | cut -d= -f2)
|
|
73
|
+
TEMPLATES_FOLDER=$(grep "^TEMPLATES_FOLDER=" "$IDE/ENV.md" | cut -d= -f2)
|
|
74
|
+
TEST_FOLDER=$(grep "^TEST_FOLDER=" "$IDE/ENV.md" | cut -d= -f2)
|
|
75
|
+
TASK_MANAGER=$(grep "^TASK_MANAGER=" "$IDE/ENV.md" | cut -d= -f2)
|
|
76
|
+
CENTRAL_DOCS_REPO=$(grep "^CENTRAL_DOCS_REPO=" "$IDE/ENV.md" | cut -d= -f2)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Quando Usar
|
|
82
|
+
|
|
83
|
+
- Ao final de cada sprint ou release para documentar a saúde de qualidade
|
|
84
|
+
- Antes de uma release major para consolidar evidências de cobertura
|
|
85
|
+
- Para comunicar métricas de QA ao time de produto e liderança
|
|
86
|
+
- Como insumo para retrospectivas de qualidade
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Padrões Críticos
|
|
91
|
+
|
|
92
|
+
- **Nunca inventar métricas** — se não houver dado, registrar como "não disponível" ou "0"
|
|
93
|
+
- **Transparência sobre gaps** — se algum tipo de dado não foi encontrado, documentar explicitamente
|
|
94
|
+
- **Período preciso** — o relatório deve ter datas de início e fim inferidas ou confirmadas com o usuário
|
|
95
|
+
- **Baseado em evidência** — cada número deve ter origem rastreável (arquivo de sessão, card do $TASK_MANAGER, etc.)
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Fluxo de Trabalho
|
|
100
|
+
|
|
101
|
+
### Fase 1 — Definir período e escopo
|
|
102
|
+
|
|
103
|
+
#### 1.1 Parsear período
|
|
104
|
+
|
|
105
|
+
A partir do argumento fornecido, determinar:
|
|
106
|
+
- **Rótulo do período**: como será exibido no relatório (ex: "Sprint 42", "Release 1.4")
|
|
107
|
+
- **Slug do período**: para usar no nome do arquivo (ex: `sprint-42`, `release-1-4`, `2026-04`)
|
|
108
|
+
- **Intervalo de datas**: se possível inferir do argumento; se não, perguntar:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Qual o intervalo de datas do período?
|
|
112
|
+
Início (YYYY-MM-DD): ___
|
|
113
|
+
Fim (YYYY-MM-DD): ___
|
|
114
|
+
|
|
115
|
+
(Opcional — deixe em branco para usar "a definir" no relatório)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
#### 1.2 Verificar relatório existente
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
ls "$DOCS_FOLDER/engineering/qa/reports/" 2>/dev/null | grep -i "{slug-do-periodo}"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Se já existir relatório do mesmo período, perguntar:
|
|
125
|
+
```
|
|
126
|
+
Já existe um relatório para este período: {arquivo}
|
|
127
|
+
|
|
128
|
+
O que deseja fazer?
|
|
129
|
+
[A] Sobrescrever com novos dados
|
|
130
|
+
[B] Criar nova versão (QA-REPORT-{SQUAD}-{PERIODO}-v2.md)
|
|
131
|
+
[C] Cancelar
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### Fase 2 — Coletar sessões exploratórias
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
ls "$SESSIONS_DIR/qa/" 2>/dev/null | sort
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Para cada arquivo `.md` na pasta de sessões:
|
|
143
|
+
1. Ler o arquivo
|
|
144
|
+
2. Verificar se pertence ao período (por data no nome ou frontmatter)
|
|
145
|
+
3. Extrair as seguintes informações:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
De cada sessão, extrair:
|
|
149
|
+
- ID da sessão (ex: EXP-20260415-1)
|
|
150
|
+
- Feature/módulo explorado
|
|
151
|
+
- Duração estimada
|
|
152
|
+
- Status do charter (✅ atingido / ⚠️ parcial / ❌ bloqueado)
|
|
153
|
+
- Bugs encontrados por severidade (S1, S2, S3, S4)
|
|
154
|
+
- Total de bugs
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Se nenhuma sessão for encontrada para o período:
|
|
158
|
+
```
|
|
159
|
+
⚠️ Nenhuma sessão exploratória encontrada em:
|
|
160
|
+
$SESSIONS_DIR/qa/
|
|
161
|
+
|
|
162
|
+
Para o período "{período}", as sessões serão registradas como "0".
|
|
163
|
+
Se as sessões existirem em outro local, informe o caminho.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### Fase 3 — Coletar bugs do período
|
|
169
|
+
|
|
170
|
+
#### 3.1 Buscar no $TASK_MANAGER (se configurado)
|
|
171
|
+
|
|
172
|
+
Dependendo do `$TASK_MANAGER` configurado no ENV.md:
|
|
173
|
+
|
|
174
|
+
**JIRA** (via MCP Atlassian):
|
|
175
|
+
```
|
|
176
|
+
mcp__claude_ai_Atlassian__searchJiraIssuesUsingJql({
|
|
177
|
+
jql: "project = \"{PROJECT_KEY}\" AND issuetype = Bug AND created >= \"{data-inicio}\" AND created <= \"{data-fim}\" ORDER BY priority ASC",
|
|
178
|
+
maxResults: 100
|
|
179
|
+
})
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**LINEAR / GITHUB / GITLAB / CLICKUP** (via CLI ou API):
|
|
183
|
+
```bash
|
|
184
|
+
# Fallback genérico: buscar em docs locais
|
|
185
|
+
ls "$SESSIONS_DIR/qa/bug-reports/" 2>/dev/null | sort
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**LOCAL ou não configurado**: buscar em `$SESSIONS_DIR/qa/` por arquivos de sessão exploratória que documentam bugs.
|
|
189
|
+
|
|
190
|
+
#### 3.2 Consolidar bugs por severidade
|
|
191
|
+
|
|
192
|
+
Para cada bug coletado, classificar conforme mapeamento:
|
|
193
|
+
|
|
194
|
+
| $TASK_MANAGER | Severidade S1 | S2 | S3 | S4 |
|
|
195
|
+
|---|---|---|---|---|
|
|
196
|
+
| **JIRA** | P0 / Highest / Crítico | P1 / High / Alto | P2 / Medium / Médio | P3 / Low / Baixo |
|
|
197
|
+
| **LINEAR** | Urgent | High | Medium | Low |
|
|
198
|
+
| **GITHUB/GITLAB** | priority-critical | priority-high | priority-medium | priority-low |
|
|
199
|
+
| **LOCAL** | S1 (literal no doc de sessão) | S2 | S3 | S4 |
|
|
200
|
+
|
|
201
|
+
Montar tabela:
|
|
202
|
+
```
|
|
203
|
+
bugs_s1=0, bugs_s2=0, bugs_s3=0, bugs_s4=0
|
|
204
|
+
bugs_resolved=0, bugs_open=0
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### Fase 4 — Coletar quality gates
|
|
210
|
+
|
|
211
|
+
Buscar resultados de quality gate no período:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Docs de quality gate salvos localmente (gerados por qa-gate)
|
|
215
|
+
ls "$DOCS_FOLDER/engineering/qa/" 2>/dev/null | grep -i "quality-gate\|qa-gate\|qg-" | sort
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Para cada resultado encontrado:
|
|
219
|
+
- Verificar se pertence ao período
|
|
220
|
+
- Extrair: feature/task, resultado (✅ / ⚠️ / 🚫), score percentual
|
|
221
|
+
|
|
222
|
+
Se nenhum resultado for encontrado, registrar como "0 quality gates documentados".
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
### Fase 5 — Coletar cobertura E2E
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Contar spec files no suite Cypress
|
|
230
|
+
find "$TEST_FOLDER" -name "*.cy.ts" -o -name "*.cy.js" -o -name "*.spec.ts" -o -name "*.spec.js" \
|
|
231
|
+
2>/dev/null | sort
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Agrupar por domínio (pasta pai do arquivo):
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
specs_por_dominio = {}
|
|
238
|
+
Para cada spec encontrada:
|
|
239
|
+
dominio = nome da pasta pai
|
|
240
|
+
specs_por_dominio[dominio] += 1
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Avaliar cobertura estimada por domínio:
|
|
244
|
+
- **Alta**: 5+ specs cobrindo fluxos principais e casos de erro
|
|
245
|
+
- **Média**: 2–4 specs cobrindo fluxo principal
|
|
246
|
+
- **Baixa**: 0–1 spec ou nenhuma para o domínio
|
|
247
|
+
|
|
248
|
+
Verificar test-backlog para identificar gaps registrados:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
cat "$DOCS_FOLDER/engineering/qa/test-backlog.md" 2>/dev/null
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
### Fase 6 — Gerar relatório
|
|
257
|
+
|
|
258
|
+
#### 6.1 Montar métricas consolidadas
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
Período: {rótulo} ({data_inicio} a {data_fim})
|
|
262
|
+
Squad: {SQUAD}
|
|
263
|
+
|
|
264
|
+
Sessões exploratórias realizadas: {N}
|
|
265
|
+
Quality gates validados: {N}
|
|
266
|
+
- ✅ Conforme (100%): {N}
|
|
267
|
+
- ⚠️ Parcial (50–99%): {N}
|
|
268
|
+
- 🚫 Bloqueado (<50%): {N}
|
|
269
|
+
|
|
270
|
+
Bugs reportados:
|
|
271
|
+
- S1 Crítico: {N} (resolvidos: {N} | em aberto: {N})
|
|
272
|
+
- S2 Alto: {N} (resolvidos: {N} | em aberto: {N})
|
|
273
|
+
- S3 Médio: {N}
|
|
274
|
+
- S4 Baixo: {N}
|
|
275
|
+
- Total: {N}
|
|
276
|
+
|
|
277
|
+
Specs E2E ativas: {N} em {N} domínios
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
#### 6.2 Identificar tendências e riscos
|
|
281
|
+
|
|
282
|
+
A partir dos dados coletados, analisar:
|
|
283
|
+
- Quais módulos/features concentram mais bugs (S1/S2)?
|
|
284
|
+
- Há domínios sem cobertura E2E com bugs registrados?
|
|
285
|
+
- Quality gates com padrão de bloqueio recorrente?
|
|
286
|
+
- Bugs S1/S2 em aberto há mais de 1 sprint?
|
|
287
|
+
|
|
288
|
+
#### 6.3 Preparar resumo executivo
|
|
289
|
+
|
|
290
|
+
Gerar 3–5 linhas com:
|
|
291
|
+
- Principal conquista do período (maior cobertura, zero S1, etc.)
|
|
292
|
+
- Principal risco identificado
|
|
293
|
+
- Tendência observada em relação ao período anterior (se existir relatório anterior)
|
|
294
|
+
|
|
295
|
+
#### 6.4 Definir recomendações
|
|
296
|
+
|
|
297
|
+
Gerar até 5 recomendações priorizadas (Alta / Média / Baixa) com base nos gaps identificados.
|
|
298
|
+
|
|
299
|
+
#### 6.5 Ler template e preencher
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
cat "$TEMPLATES_FOLDER/engineering/qa/qa.quality-report-template.md"
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Preencher o template com todos os dados coletados. Para campos sem dados, usar `—` (não deixar vazio).
|
|
306
|
+
|
|
307
|
+
#### 6.6 Salvar relatório
|
|
308
|
+
|
|
309
|
+
```
|
|
310
|
+
Caminho: $DOCS_FOLDER/engineering/qa/reports/QA-REPORT-{SQUAD}-{SLUG-PERIODO}.md
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Garantir que o frontmatter esteja preenchido:
|
|
314
|
+
```yaml
|
|
315
|
+
---
|
|
316
|
+
period: "{rótulo do período}"
|
|
317
|
+
squad: "{SQUAD}"
|
|
318
|
+
version: "1.0"
|
|
319
|
+
status: Draft
|
|
320
|
+
---
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
### Fase 7 — Publicação no Central Docs (condicional)
|
|
326
|
+
|
|
327
|
+
Se `CENTRAL_DOCS_REPO` estiver configurado no ENV.md, perguntar:
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
Relatório salvo em: {caminho}
|
|
331
|
+
|
|
332
|
+
Deseja publicar no central-docs?
|
|
333
|
+
[S] Publicar agora (cria MR no GitLab)
|
|
334
|
+
[N] Não publicar agora
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Se sim**, executar:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
jarvis docs publish \
|
|
341
|
+
--file "$DOCS_FOLDER/engineering/qa/reports/QA-REPORT-{SQUAD}-{SLUG-PERIODO}.md" \
|
|
342
|
+
--tipo qa-report \
|
|
343
|
+
--feature "{squad-slug}-{periodo-slug}"
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
- ✅ Sucesso: "Relatório publicado. MR criado: [URL]"
|
|
347
|
+
- ❌ Frontmatter inválido: orientar o usuário a preencher os campos `period`, `squad` e `version`
|
|
348
|
+
- ℹ️ Recusou: informar o comando para publicar manualmente depois
|
|
349
|
+
|
|
350
|
+
Se `CENTRAL_DOCS_REPO` não estiver definido: apenas informar que a publicação pode ser habilitada via ENV.md.
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## Regras
|
|
355
|
+
|
|
356
|
+
### Nunca
|
|
357
|
+
- Inventar números — se não há dado, registrar como "0" ou "não disponível"
|
|
358
|
+
- Gerar relatório sem identificar claramente o período e o squad
|
|
359
|
+
- Omitir bugs S1/S2 em aberto — eles devem sempre aparecer no relatório, mesmo sem dados completos
|
|
360
|
+
- Considerar dados de períodos diferentes como parte do período corrente
|
|
361
|
+
|
|
362
|
+
### Sempre
|
|
363
|
+
- Registrar a fonte de cada dado (arquivo de sessão, card do $TASK_MANAGER, suite Cypress)
|
|
364
|
+
- Indicar quando um tipo de dado não foi encontrado e por quê
|
|
365
|
+
- Incluir recomendações acionáveis — não apenas listar problemas
|
|
366
|
+
- Garantir que o frontmatter (`period`, `squad`, `version`) esteja preenchido antes de salvar
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Checklist de Conclusão
|
|
371
|
+
|
|
372
|
+
- [ ] Período definido com rótulo e slug
|
|
373
|
+
- [ ] Sessões exploratórias coletadas e sumarizadas
|
|
374
|
+
- [ ] Bugs consolidados por severidade com status (resolvido / em aberto)
|
|
375
|
+
- [ ] Quality gates contabilizados por status
|
|
376
|
+
- [ ] Cobertura E2E mapeada por domínio
|
|
377
|
+
- [ ] Resumo executivo redigido (3–5 linhas)
|
|
378
|
+
- [ ] Tendências e riscos identificados
|
|
379
|
+
- [ ] Recomendações geradas (pelo menos 1)
|
|
380
|
+
- [ ] Template preenchido com frontmatter válido
|
|
381
|
+
- [ ] Relatório salvo em `$DOCS_FOLDER/engineering/qa/reports/`
|
|
382
|
+
- [ ] Publicação no central-docs perguntada (se `CENTRAL_DOCS_REPO` configurado)
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Output
|
|
387
|
+
|
|
388
|
+
```
|
|
389
|
+
$DOCS_FOLDER/engineering/qa/reports/QA-REPORT-{SQUAD}-{SLUG-PERIODO}.md
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## Mensagem de Conclusão
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
✅ Relatório de qualidade gerado
|
|
398
|
+
|
|
399
|
+
Período : {rótulo do período}
|
|
400
|
+
Squad : {SQUAD}
|
|
401
|
+
Arquivo : {caminho do relatório}
|
|
402
|
+
|
|
403
|
+
Resumo:
|
|
404
|
+
Sessões exploratórias : {N}
|
|
405
|
+
Bugs reportados : {N} (S1: {N} · S2: {N} · S3: {N} · S4: {N})
|
|
406
|
+
Quality gates : ✅ {N} conforme · ⚠️ {N} parcial · 🚫 {N} bloqueado
|
|
407
|
+
Specs E2E ativas : {N} specs em {N} domínios
|
|
408
|
+
|
|
409
|
+
{Se CENTRAL_DOCS_REPO configurado}
|
|
410
|
+
Para publicar no central-docs:
|
|
411
|
+
jarvis docs publish --file {caminho} --tipo qa-report --feature {squad}-{periodo-slug}
|
|
412
|
+
```
|