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
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Publica documento no central-docs (GitLab / GitHub / Bitbucket) via branch + MR/PR
|
|
3
|
-
|
|
4
|
-
set -e
|
|
5
|
-
|
|
6
|
-
LOCAL_FILE="$1" # Ex: ./docs/engineering/ard-api-wallet.md
|
|
7
|
-
TIPO="$2" # prd|frd|ard|rfc
|
|
8
|
-
FEATURE="$3" # Ex: api-wallet-auth-jwt
|
|
9
|
-
|
|
10
|
-
# Resolver path absoluto do script (independente de cwd)
|
|
11
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
-
|
|
13
|
-
if [ -z "$LOCAL_FILE" ] || [ -z "$TIPO" ] || [ -z "$FEATURE" ]; then
|
|
14
|
-
echo "Uso: publish-file.sh <local-file> <tipo> <feature>" >&2
|
|
15
|
-
echo "Tipos válidos: prd, frd, ard, rfc, swagger, qa-report" >&2
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
if [ ! -f "$LOCAL_FILE" ]; then
|
|
20
|
-
echo "Erro: Arquivo não encontrado: $LOCAL_FILE" >&2
|
|
21
|
-
exit 1
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
# Detectar IDE directory
|
|
25
|
-
if [ -d ".windsurf" ]; then
|
|
26
|
-
IDE=".windsurf"
|
|
27
|
-
elif [ -d ".claude" ]; then
|
|
28
|
-
IDE=".claude"
|
|
29
|
-
elif [ -d ".cursor" ]; then
|
|
30
|
-
IDE=".cursor"
|
|
31
|
-
elif [ -d ".vscode" ]; then
|
|
32
|
-
IDE=".vscode"
|
|
33
|
-
else
|
|
34
|
-
echo "Erro: IDE directory não encontrado (.windsurf, .claude, .cursor, .vscode)" >&2
|
|
35
|
-
exit 1
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# 1. Ler ENV.md (se não houver override)
|
|
39
|
-
if [ -n "$SQUAD_OVERRIDE" ] && [ -n "$WORKSPACE_OVERRIDE" ]; then
|
|
40
|
-
# Usar override das variáveis de ambiente
|
|
41
|
-
SQUAD="$SQUAD_OVERRIDE"
|
|
42
|
-
WORKSPACE="$WORKSPACE_OVERRIDE"
|
|
43
|
-
else
|
|
44
|
-
# Ler do ENV.md
|
|
45
|
-
if [ ! -f "$IDE/ENV.md" ]; then
|
|
46
|
-
echo "Erro: ENV.md não encontrado em $IDE/" >&2
|
|
47
|
-
echo "Ou passe --squad e --workspace via CLI" >&2
|
|
48
|
-
exit 1
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
SQUAD=$(grep '^SQUAD=' "$IDE/ENV.md" | cut -d'=' -f2 | tr -d ' ')
|
|
52
|
-
WORKSPACE=$(grep '^WORKSPACE=' "$IDE/ENV.md" | cut -d'=' -f2 | tr -d ' ')
|
|
53
|
-
|
|
54
|
-
if [ -z "$SQUAD" ] || [ -z "$WORKSPACE" ]; then
|
|
55
|
-
echo "Erro: SQUAD ou WORKSPACE não definidos no ENV.md" >&2
|
|
56
|
-
echo "Ou passe --squad e --workspace via CLI" >&2
|
|
57
|
-
exit 1
|
|
58
|
-
fi
|
|
59
|
-
fi
|
|
60
|
-
|
|
61
|
-
TARGET_BRANCH="${CENTRAL_DOCS_TARGET_BRANCH:-dev}"
|
|
62
|
-
|
|
63
|
-
if [ -z "$CENTRAL_DOCS_REPO" ]; then
|
|
64
|
-
echo "Erro: CENTRAL_DOCS_REPO não definido no ENV.md" >&2
|
|
65
|
-
exit 1
|
|
66
|
-
fi
|
|
67
|
-
|
|
68
|
-
# 2. Validar frontmatter
|
|
69
|
-
echo "Validando frontmatter..."
|
|
70
|
-
node --input-type=module -e "
|
|
71
|
-
import { validateFrontmatter } from 'file://${SCRIPT_DIR}/validate-frontmatter.js';
|
|
72
|
-
try {
|
|
73
|
-
validateFrontmatter('$LOCAL_FILE', '$TIPO');
|
|
74
|
-
console.log('✅ Frontmatter válido');
|
|
75
|
-
} catch (error) {
|
|
76
|
-
console.error(error.message);
|
|
77
|
-
process.exit(1);
|
|
78
|
-
}
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
if [ $? -ne 0 ]; then
|
|
82
|
-
exit 1
|
|
83
|
-
fi
|
|
84
|
-
|
|
85
|
-
# 3. Extrair metadados
|
|
86
|
-
METADATA=$(node --input-type=module -e "
|
|
87
|
-
import { extractMetadata } from 'file://${SCRIPT_DIR}/validate-frontmatter.js';
|
|
88
|
-
const metadata = extractMetadata('$LOCAL_FILE');
|
|
89
|
-
console.log(JSON.stringify(metadata));
|
|
90
|
-
")
|
|
91
|
-
|
|
92
|
-
VERSION=$(echo "$METADATA" | jq -r '.version // "1.0.0"')
|
|
93
|
-
STATUS=$(echo "$METADATA" | jq -r '.status // "draft"')
|
|
94
|
-
JIRA=$(echo "$METADATA" | jq -r '.jira // ""')
|
|
95
|
-
DOC_NAME=$(echo "$METADATA" | jq -r '.name // ""')
|
|
96
|
-
|
|
97
|
-
# 4. Definir paths
|
|
98
|
-
if [ "$TIPO" = "prd" ] || [ "$TIPO" = "frd" ]; then
|
|
99
|
-
DEST_PATH="${SQUAD}/${WORKSPACE}/product/${TIPO}-${FEATURE}.md"
|
|
100
|
-
AREA="product"
|
|
101
|
-
elif [ "$TIPO" = "ard" ]; then
|
|
102
|
-
DEST_PATH="${SQUAD}/${WORKSPACE}/engineering/ARD/${TIPO}-${FEATURE}.md"
|
|
103
|
-
AREA="engineering"
|
|
104
|
-
elif [ "$TIPO" = "rfc" ]; then
|
|
105
|
-
DEST_PATH="${SQUAD}/${WORKSPACE}/engineering/RFC/${TIPO}-${FEATURE}.md"
|
|
106
|
-
AREA="engineering"
|
|
107
|
-
elif [ "$TIPO" = "swagger" ]; then
|
|
108
|
-
# Detectar extensão do arquivo (yaml, json ou md)
|
|
109
|
-
FILE_EXT="${LOCAL_FILE##*.}"
|
|
110
|
-
if [ "$FILE_EXT" = "yaml" ] || [ "$FILE_EXT" = "yml" ]; then
|
|
111
|
-
DEST_PATH="${SQUAD}/${WORKSPACE}/engineering/swagger/api-${FEATURE}.yaml"
|
|
112
|
-
elif [ "$FILE_EXT" = "json" ]; then
|
|
113
|
-
DEST_PATH="${SQUAD}/${WORKSPACE}/engineering/swagger/api-${FEATURE}.json"
|
|
114
|
-
else
|
|
115
|
-
# Default para .md (wrapper com metadados)
|
|
116
|
-
DEST_PATH="${SQUAD}/${WORKSPACE}/engineering/swagger/swagger-${FEATURE}.md"
|
|
117
|
-
fi
|
|
118
|
-
AREA="engineering"
|
|
119
|
-
elif [ "$TIPO" = "qa-report" ]; then
|
|
120
|
-
DEST_PATH="${SQUAD}/${WORKSPACE}/engineering/qa/qa-report-${FEATURE}.md"
|
|
121
|
-
AREA="engineering"
|
|
122
|
-
else
|
|
123
|
-
echo "Erro: Tipo inválido: $TIPO" >&2
|
|
124
|
-
echo "Tipos válidos: prd, frd, ard, rfc, swagger, qa-report" >&2
|
|
125
|
-
exit 1
|
|
126
|
-
fi
|
|
127
|
-
|
|
128
|
-
INDEX_PATH="${SQUAD}/${WORKSPACE}/index.md"
|
|
129
|
-
BRANCH_NAME="docs/${SQUAD}/${WORKSPACE}/${TIPO}-${FEATURE}"
|
|
130
|
-
|
|
131
|
-
echo ""
|
|
132
|
-
echo "📋 Resumo da Publicação:"
|
|
133
|
-
echo " Squad: $SQUAD"
|
|
134
|
-
echo " Workspace: $WORKSPACE"
|
|
135
|
-
echo " Tipo: $TIPO"
|
|
136
|
-
echo " Feature: $FEATURE"
|
|
137
|
-
echo " Destino: $DEST_PATH"
|
|
138
|
-
echo " Branch: $BRANCH_NAME → $TARGET_BRANCH"
|
|
139
|
-
echo ""
|
|
140
|
-
|
|
141
|
-
# 5–6. Token e parse do repo ficam no adapter VCS (api.js)
|
|
142
|
-
|
|
143
|
-
# 7. Ler conteúdo do arquivo local e encodar em base64
|
|
144
|
-
FILE_CONTENT=$(cat "$LOCAL_FILE" | base64)
|
|
145
|
-
|
|
146
|
-
# 8. Buscar index.md atual
|
|
147
|
-
echo "Buscando index.md do workspace..."
|
|
148
|
-
INDEX_CONTENT=$(bash "${SCRIPT_DIR}/fetch-file.sh" "$INDEX_PATH" "$TARGET_BRANCH" 2>/dev/null || echo "")
|
|
149
|
-
|
|
150
|
-
if [ -z "$INDEX_CONTENT" ]; then
|
|
151
|
-
echo "⚠️ index.md não encontrado, será criado"
|
|
152
|
-
INDEX_ACTION="create"
|
|
153
|
-
INDEX_CONTENT="# $WORKSPACE
|
|
154
|
-
|
|
155
|
-
**Squad:** $SQUAD
|
|
156
|
-
|
|
157
|
-
## $AREA
|
|
158
|
-
|
|
159
|
-
"
|
|
160
|
-
else
|
|
161
|
-
INDEX_ACTION="update"
|
|
162
|
-
fi
|
|
163
|
-
|
|
164
|
-
# 9. Adicionar nova linha ao index.md
|
|
165
|
-
NEW_LINE="- [${TIPO}-${FEATURE}.md](${AREA}/${TIPO}-${FEATURE}.md) | v${VERSION} | ${STATUS}"
|
|
166
|
-
[ -n "$JIRA" ] && NEW_LINE="${NEW_LINE} | jira: ${JIRA}"
|
|
167
|
-
[ -n "$DOC_NAME" ] && NEW_LINE="${NEW_LINE} | ${DOC_NAME}"
|
|
168
|
-
|
|
169
|
-
# Adicionar linha na seção correta
|
|
170
|
-
UPDATED_INDEX=$(echo "$INDEX_CONTENT" | awk -v line="$NEW_LINE" -v area="$AREA" '
|
|
171
|
-
/^## (product|engineering)/ {
|
|
172
|
-
print
|
|
173
|
-
if ($2 == area) {
|
|
174
|
-
found = 1
|
|
175
|
-
getline
|
|
176
|
-
print line
|
|
177
|
-
}
|
|
178
|
-
next
|
|
179
|
-
}
|
|
180
|
-
{ print }
|
|
181
|
-
END {
|
|
182
|
-
if (!found) {
|
|
183
|
-
print ""
|
|
184
|
-
print "## " area
|
|
185
|
-
print line
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
')
|
|
189
|
-
|
|
190
|
-
UPDATED_INDEX_B64=$(echo "$UPDATED_INDEX" | base64)
|
|
191
|
-
|
|
192
|
-
# 10. Criar commit via adapter VCS
|
|
193
|
-
echo "Criando branch e commit..."
|
|
194
|
-
|
|
195
|
-
COMMIT_JSON=$(mktemp)
|
|
196
|
-
cat > "$COMMIT_JSON" <<EOF
|
|
197
|
-
{
|
|
198
|
-
"branch": $(printf '%s' "$BRANCH_NAME" | jq -Rs .),
|
|
199
|
-
"startBranch": $(printf '%s' "$TARGET_BRANCH" | jq -Rs .),
|
|
200
|
-
"message": $(printf '%s' "docs(${SQUAD}): add ${TIPO} ${FEATURE}" | jq -Rs .),
|
|
201
|
-
"files": [
|
|
202
|
-
{
|
|
203
|
-
"path": $(printf '%s' "$DEST_PATH" | jq -Rs .),
|
|
204
|
-
"contentBase64": $(printf '%s' "$FILE_CONTENT" | jq -Rs .),
|
|
205
|
-
"action": "create"
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
"path": $(printf '%s' "$INDEX_PATH" | jq -Rs .),
|
|
209
|
-
"contentBase64": $(printf '%s' "$UPDATED_INDEX_B64" | jq -Rs .),
|
|
210
|
-
"action": $(printf '%s' "$INDEX_ACTION" | jq -Rs .)
|
|
211
|
-
}
|
|
212
|
-
]
|
|
213
|
-
}
|
|
214
|
-
EOF
|
|
215
|
-
|
|
216
|
-
COMMIT_RESULT=$(node --input-type=module -e "
|
|
217
|
-
import { readFileSync } from 'node:fs';
|
|
218
|
-
import { commitFiles } from 'file://${SCRIPT_DIR}/../vcs/api.js';
|
|
219
|
-
const opts = JSON.parse(readFileSync('$COMMIT_JSON', 'utf-8'));
|
|
220
|
-
const result = await commitFiles(process.env.CENTRAL_DOCS_REPO, opts);
|
|
221
|
-
console.log(JSON.stringify(result));
|
|
222
|
-
" 2>&1)
|
|
223
|
-
COMMIT_EXIT=$?
|
|
224
|
-
rm -f "$COMMIT_JSON"
|
|
225
|
-
|
|
226
|
-
if [ $COMMIT_EXIT -ne 0 ]; then
|
|
227
|
-
echo "❌ Erro ao criar commit:" >&2
|
|
228
|
-
echo "$COMMIT_RESULT" >&2
|
|
229
|
-
exit 1
|
|
230
|
-
fi
|
|
231
|
-
|
|
232
|
-
COMMIT_SHA=$(echo "$COMMIT_RESULT" | jq -r '.sha')
|
|
233
|
-
echo "✅ Commit criado: $COMMIT_SHA"
|
|
234
|
-
|
|
235
|
-
# 11. Criar MR/PR
|
|
236
|
-
echo "Criando Merge/Pull Request..."
|
|
237
|
-
|
|
238
|
-
MR_DESCRIPTION="## Documento
|
|
239
|
-
|
|
240
|
-
- **Tipo**: ${TIPO}
|
|
241
|
-
- **Workspace**: ${WORKSPACE}
|
|
242
|
-
- **Feature**: ${FEATURE}"
|
|
243
|
-
|
|
244
|
-
[ -n "$JIRA" ] && MR_DESCRIPTION="${MR_DESCRIPTION}
|
|
245
|
-
- **Card**: ${JIRA}"
|
|
246
|
-
|
|
247
|
-
[ -n "$DOC_NAME" ] && MR_DESCRIPTION="${MR_DESCRIPTION}
|
|
248
|
-
- **Nome**: ${DOC_NAME}"
|
|
249
|
-
|
|
250
|
-
BODY_FILE=$(mktemp)
|
|
251
|
-
printf '%s' "$MR_DESCRIPTION" > "$BODY_FILE"
|
|
252
|
-
|
|
253
|
-
MR_RESULT=$(node "${SCRIPT_DIR}/../vcs/create-merge.js" \
|
|
254
|
-
--repo "$CENTRAL_DOCS_REPO" \
|
|
255
|
-
--source "$BRANCH_NAME" \
|
|
256
|
-
--target "$TARGET_BRANCH" \
|
|
257
|
-
--title "docs(${SQUAD}): ${TIPO} ${FEATURE}" \
|
|
258
|
-
--body-file "$BODY_FILE" 2>&1)
|
|
259
|
-
MR_EXIT=$?
|
|
260
|
-
rm -f "$BODY_FILE"
|
|
261
|
-
|
|
262
|
-
if [ $MR_EXIT -ne 0 ]; then
|
|
263
|
-
echo "❌ Erro ao criar MR/PR:" >&2
|
|
264
|
-
echo "$MR_RESULT" >&2
|
|
265
|
-
exit 1
|
|
266
|
-
fi
|
|
267
|
-
|
|
268
|
-
MR_URL=$(echo "$MR_RESULT" | tail -1 | jq -r '.url // empty')
|
|
269
|
-
MR_IID=$(echo "$MR_RESULT" | tail -1 | jq -r '.iid // empty')
|
|
270
|
-
|
|
271
|
-
echo ""
|
|
272
|
-
echo "✅ Merge/Pull Request criado com sucesso!"
|
|
273
|
-
echo ""
|
|
274
|
-
echo " #${MR_IID}: ${BRANCH_NAME} → ${TARGET_BRANCH}"
|
|
275
|
-
echo " URL: ${MR_URL}"
|
|
276
|
-
echo ""
|
|
277
|
-
|
|
278
|
-
# 12. Invalidar cache Redis
|
|
279
|
-
redis-cli DEL "docs:${INDEX_PATH}:${TARGET_BRANCH}" >/dev/null 2>&1 || true
|
|
280
|
-
redis-cli DEL "docs:${INDEX_PATH}:main" >/dev/null 2>&1 || true
|
|
281
|
-
|
|
282
|
-
echo "🔄 Cache Redis invalidado"
|
|
283
|
-
echo ""
|
|
284
|
-
echo "✅ Publicação concluída!"
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
# Regras de Sessão de Teste Exploratório — QA Engineering
|
|
2
|
-
|
|
3
|
-
> **Applies to:** HUB: QA | POSITION: all | AREA: ENGINEERING | SQUAD: all
|
|
4
|
-
|
|
5
|
-
Convenções para planejamento, execução e documentação de sessões de teste exploratório estruturado.
|
|
6
|
-
Carregadas automaticamente pelo `warm-up` quando `HUB=QA`.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Estrutura de Charter
|
|
11
|
-
|
|
12
|
-
Todo teste exploratório começa com um **charter** — a declaração do objetivo da sessão.
|
|
13
|
-
|
|
14
|
-
**Formato obrigatório:**
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
Explorar {área/feature/fluxo}
|
|
18
|
-
para descobrir {tipo de informação / riscos a validar}
|
|
19
|
-
com foco em {dimensão de qualidade}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**Exemplos:**
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
Explorar o fluxo de cadastro de veículos
|
|
26
|
-
para descobrir comportamentos inesperados em campos opcionais e limites de dados
|
|
27
|
-
com foco em robustez e validação de formulário
|
|
28
|
-
|
|
29
|
-
Explorar a integração de pagamentos após alteração de plano
|
|
30
|
-
para descobrir regressões introduzidas pela última release
|
|
31
|
-
com foco em consistência de estado e mensagens ao usuário
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**Regras do charter:**
|
|
35
|
-
- Máximo 3 linhas — objetivo claro, não um roteiro detalhado
|
|
36
|
-
- Não listar passos no charter — exploração decide o caminho
|
|
37
|
-
- Um charter por sessão (sessões paralelas têm charters independentes)
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 2. Time-box Padrão
|
|
42
|
-
|
|
43
|
-
| Tipo de sessão | Duração | Quando usar |
|
|
44
|
-
|----------------|---------|-------------|
|
|
45
|
-
| Rápida (spot check) | 30 min | Verificação pontual, pós-fix rápido |
|
|
46
|
-
| Padrão | 60 min | Feature nova, área de risco moderado |
|
|
47
|
-
| Profunda | 90 min | Feature crítica, área de alto risco, pré-release |
|
|
48
|
-
|
|
49
|
-
**Regras de time-box:**
|
|
50
|
-
- Nunca estender uma sessão além do tempo definido — iniciar nova sessão se necessário
|
|
51
|
-
- Os primeiros 10 min são de setup e entendimento — não contam como execução
|
|
52
|
-
- Registrar hora de início e fim no documento de sessão
|
|
53
|
-
- Pausa obrigatória de 15 min entre sessões consecutivas
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 3. Classificação de Severidade de Bugs
|
|
58
|
-
|
|
59
|
-
| Severidade | Label | Critério | Ação imediata |
|
|
60
|
-
|------------|-------|----------|---------------|
|
|
61
|
-
| **Crítico** | `S1` | Sistema inutilizável, perda de dados, falha de segurança | Reportar imediatamente — não esperar fim da sessão |
|
|
62
|
-
| **Alto** | `S2` | Feature principal quebrada, sem workaround óbvio | Reportar ao final da sessão, com evidência |
|
|
63
|
-
| **Médio** | `S3` | Feature funciona mas com comportamento incorreto ou inconsistente | Registrar no doc da sessão, criar card após |
|
|
64
|
-
| **Baixo** | `S4` | UI incorreta, texto errado, comportamento subótimo mas funcional | Registrar no doc da sessão, agrupar em batch |
|
|
65
|
-
| **Melhoria** | `S5` | Não é bug — sugestão de UX ou comportamento melhor | Separar claramente de bugs reais |
|
|
66
|
-
|
|
67
|
-
**Regras de severidade:**
|
|
68
|
-
- Nunca sub-reportar para "não incomodar" — severidade é objetiva, não subjetiva
|
|
69
|
-
- Um bug S1 interrompe a sessão e é reportado via canal direto ao time
|
|
70
|
-
- Bugs S4 e S5 podem ser agrupados em um card único "ajustes UI/UX — {área}"
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## 4. Critérios de Parada de Sessão
|
|
75
|
-
|
|
76
|
-
Encerrar a sessão antes do time-box quando:
|
|
77
|
-
|
|
78
|
-
| Critério | Ação |
|
|
79
|
-
|----------|------|
|
|
80
|
-
| Bug S1 encontrado | Interromper, reportar imediatamente, documentar contexto |
|
|
81
|
-
| Ambiente instável (falhas de infra, não de software) | Encerrar, registrar causa, reagendar |
|
|
82
|
-
| Charter atingido antes do tempo | Encerrar normalmente, registrar cobertura atingida |
|
|
83
|
-
| Descoberta muda completamente o escopo | Encerrar, definir novo charter para próxima sessão |
|
|
84
|
-
|
|
85
|
-
**Nunca encerrar uma sessão sem:**
|
|
86
|
-
- Registrar o que foi explorado (mesmo que parcialmente)
|
|
87
|
-
- Classificar cada achado com severidade
|
|
88
|
-
- Marcar se o charter foi atingido (`completo`, `parcial`, `bloqueado`)
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## 5. Dimensões de Qualidade para Foco
|
|
93
|
-
|
|
94
|
-
Ao definir o charter, escolher no máximo 2 dimensões de qualidade:
|
|
95
|
-
|
|
96
|
-
| Dimensão | O que verificar |
|
|
97
|
-
|----------|----------------|
|
|
98
|
-
| **Funcionalidade** | O comportamento faz o que a spec diz? |
|
|
99
|
-
| **Robustez** | Reage bem a entradas inesperadas, limites, dados faltantes? |
|
|
100
|
-
| **Consistência** | Estado do sistema permanece coerente após a ação? |
|
|
101
|
-
| **Performance percebida** | Tempos de resposta aceitáveis para o usuário? |
|
|
102
|
-
| **Acessibilidade** | Navegação por teclado, leitores de tela, contraste? |
|
|
103
|
-
| **Segurança superficial** | Dados expostos indevidamente, autorização correta? |
|
|
104
|
-
| **Integração** | Comunicação correta com outros módulos/serviços? |
|
|
105
|
-
| **Regressão** | Funcionalidades existentes ainda funcionam após mudança? |
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## 6. Evidências Obrigatórias
|
|
110
|
-
|
|
111
|
-
Para cada bug reportado:
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
- Severidade: S{1-5}
|
|
115
|
-
- Passos para reproduzir: numerados, a partir do estado inicial
|
|
116
|
-
- Comportamento observado: o que aconteceu
|
|
117
|
-
- Comportamento esperado: o que deveria acontecer
|
|
118
|
-
- Evidência: screenshot, vídeo ou log (obrigatório para S1/S2)
|
|
119
|
-
- Ambiente: URL/versão/dados usados no momento do bug
|
|
120
|
-
- Reprodutível?: sim / às vezes / não consegui reproduzir novamente
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## 7. Integração com `eng-qa-bug-report`
|
|
126
|
-
|
|
127
|
-
Ao final de cada sessão, para cada achado S1–S4, acionar o skill `eng-qa-bug-report`:
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
/eng-qa-bug-report create
|
|
131
|
-
--title="{descrição concisa}"
|
|
132
|
-
--severity="S{1-4}"
|
|
133
|
-
--session="{id da sessão}"
|
|
134
|
-
--passos="{passos reproduzidos}"
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
Achados S5 (melhorias) são registrados apenas no doc da sessão — não viram card automaticamente.
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
> **Applies to:** HUB: QA | POSITION: QA-ENGINEER, SPECIALIST | AREA: ENGINEERING | SQUAD: all
|
|
2
|
-
|
|
3
|
-
# Regras de Classificação de Score
|
|
4
|
-
|
|
5
|
-
Sistema de pontuação e bloqueio para quality gates de tech specs.
|
|
6
|
-
|
|
7
|
-
## Faixas de Score
|
|
8
|
-
|
|
9
|
-
### 🚫 BLOQUEANTE - Score < 50%
|
|
10
|
-
|
|
11
|
-
**Status**: Não conforme
|
|
12
|
-
**Label**: `QualityGate::Bloqueado`
|
|
13
|
-
**Ação**: Card **NÃO PODE** prosseguir para breakdown. Deve retornar para refinamento.
|
|
14
|
-
|
|
15
|
-
#### Quando bloquear:
|
|
16
|
-
- Faltam 3 ou mais critérios obrigatórios
|
|
17
|
-
- Descrição completamente vazia ou genérica
|
|
18
|
-
- SPIKE sem referências de discovery
|
|
19
|
-
- Critérios de aceitação ausentes ou muito vagos
|
|
20
|
-
- Bug sem passos para reproduzir
|
|
21
|
-
- Análise técnica inexistente ou incompleta
|
|
22
|
-
- Subtarefas propostas são fatias horizontais (só enum, só repository, só factory, só DTO, só contratos sem implementação funcional) ou não passam no Teste de Validação de independência
|
|
23
|
-
|
|
24
|
-
#### Mensagem ao time:
|
|
25
|
-
> ⚠️ **Card bloqueado para breakdown**. Tech spec não atende aos critérios mínimos de qualidade. Refine conforme recomendações e solicite nova análise.
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
### ⚠️ PARCIAL - Score 50-99%
|
|
30
|
-
|
|
31
|
-
**Status**: Parcialmente conforme
|
|
32
|
-
**Label**: `QualityGate::Parcial`
|
|
33
|
-
**Ação**: Card **PODE** prosseguir, mas com ressalvas. Recomenda-se refinamento antes.
|
|
34
|
-
|
|
35
|
-
#### Quando classificar como parcial:
|
|
36
|
-
- 1-2 critérios obrigatórios faltando
|
|
37
|
-
- Critérios presentes mas podem ser melhorados
|
|
38
|
-
- Faltam alguns cenários de teste
|
|
39
|
-
- Análise técnica superficial
|
|
40
|
-
- Dependências parcialmente mapeadas
|
|
41
|
-
|
|
42
|
-
#### Mensagem ao time:
|
|
43
|
-
> ℹ️ **Card pode prosseguir com ressalvas**. A tech spec está funcional mas pode ser melhorada. Considere as recomendações para aumentar qualidade.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
### ✅ CONFORME - Score 100%
|
|
48
|
-
|
|
49
|
-
**Status**: Conforme
|
|
50
|
-
**Label**: `QualityGate::Conforme`
|
|
51
|
-
**Ação**: Card está **PRONTO** para breakdown de subtarefas.
|
|
52
|
-
|
|
53
|
-
#### Quando aprovar:
|
|
54
|
-
- Todos os critérios obrigatórios atendidos
|
|
55
|
-
- Tech spec clara, completa e acionável
|
|
56
|
-
- Equipe pode iniciar implementação sem dúvidas
|
|
57
|
-
- Critérios de aceitação mensuráveis
|
|
58
|
-
- Cenários de teste identificados
|
|
59
|
-
- Análise técnica detalhada
|
|
60
|
-
- Dependências mapeadas
|
|
61
|
-
|
|
62
|
-
#### Mensagem ao time:
|
|
63
|
-
> ✅ **Tech spec aprovada!** Todos os critérios de qualidade atendidos. Card pronto para breakdown de subtarefas.
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## Cálculo de Score
|
|
68
|
-
|
|
69
|
-
### Metodologia
|
|
70
|
-
|
|
71
|
-
1. **Identificar critérios obrigatórios** do tipo de card (Task/Spike/Bug)
|
|
72
|
-
2. **Verificar cada critério**: Atendido = 1 ponto, Não atendido = 0 pontos
|
|
73
|
-
3. **Calcular percentual**: (Critérios atendidos / Total critérios) × 100
|
|
74
|
-
|
|
75
|
-
### Exemplo: Task
|
|
76
|
-
|
|
77
|
-
| Critério | Atendido? | Peso |
|
|
78
|
-
|----------|-----------|------|
|
|
79
|
-
| Descrição Clara | ✅ Sim | 15% |
|
|
80
|
-
| Critérios de Aceitação | ✅ Sim | 20% |
|
|
81
|
-
| Cenários de Teste | ❌ Não | 15% |
|
|
82
|
-
| Análise Técnica | ✅ Sim | 15% |
|
|
83
|
-
| Dependências | ⚠️ Parcial | 10% |
|
|
84
|
-
| **Valor Unitário (fatia vertical)** | ✅ Sim | **25%** |
|
|
85
|
-
|
|
86
|
-
**Score**: 80/100 → **Parcial**
|
|
87
|
-
|
|
88
|
-
> **Critério 6 — Valor Unitário (fatia vertical)** é o critério de maior peso. Avalia se as subtarefas propostas são **entregáveis completos e independentes** (endpoint inteiro, modal inteiro, tela inteira) e **não** fatias horizontais (só enum, só repository, só factory, só DTO). Uma subtarefa só é válida se, mergeada isoladamente, a aplicação continua funcionando e a entrega é observável.
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Matriz de Decisão
|
|
93
|
-
|
|
94
|
-
| Score | Status | Label | Pode prosseguir? | Ação requerida |
|
|
95
|
-
|-------|--------|-------|------------------|----------------|
|
|
96
|
-
| 0-49% | 🚫 Não conforme | `QualityGate::Bloqueado` | ❌ Não | Refinamento obrigatório |
|
|
97
|
-
| 50-99% | ⚠️ Parcial | `QualityGate::Parcial` | ⚠️ Com ressalvas | Refinamento recomendado |
|
|
98
|
-
| 100% | ✅ Conforme | `QualityGate::Conforme` | ✅ Sim | Prosseguir para breakdown |
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Regras Especiais
|
|
103
|
-
|
|
104
|
-
### Critérios Críticos (Bloqueantes Automáticos)
|
|
105
|
-
|
|
106
|
-
Mesmo com score > 50%, o card é **automaticamente bloqueado** se:
|
|
107
|
-
|
|
108
|
-
#### Para SPIKE:
|
|
109
|
-
- ❌ Ausência completa de referências de discovery
|
|
110
|
-
|
|
111
|
-
#### Para BUG:
|
|
112
|
-
- ❌ Ausência de passos para reproduzir
|
|
113
|
-
- ❌ Ausência de análise técnica
|
|
114
|
-
|
|
115
|
-
#### Para TASK:
|
|
116
|
-
- ❌ Ausência de critérios de aceitação
|
|
117
|
-
- ❌ Descrição vazia ou extremamente genérica (< 50 caracteres)
|
|
118
|
-
- ❌ Subtarefas propostas são fatias horizontais (split por camada) — ex: cards separados para "criar enum", "criar repository", "criar factory", "criar DTO", "criar contratos/interfaces" sem implementação funcional
|
|
119
|
-
- ❌ Subtarefas não passam no Teste de Validação de independência (não mergeáveis isoladamente sem quebrar o sistema)
|
|
120
|
-
|
|
121
|
-
### Exemplo:
|
|
122
|
-
```
|
|
123
|
-
Score calculado: 60% (Parcial)
|
|
124
|
-
Mas: Task sem critérios de aceitação
|
|
125
|
-
Resultado final: BLOQUEADO (critério crítico não atendido)
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## Processo de Reavaliação
|
|
131
|
-
|
|
132
|
-
### Após Correções
|
|
133
|
-
|
|
134
|
-
1. Desenvolvedor corrige problemas apontados
|
|
135
|
-
2. Solicita nova análise (comentário mencionando Quality Champion)
|
|
136
|
-
3. Nova validação é realizada
|
|
137
|
-
4. Score é recalculado
|
|
138
|
-
5. Label é atualizada
|
|
139
|
-
|
|
140
|
-
### Histórico de Validações
|
|
141
|
-
|
|
142
|
-
Cada validação deve incluir:
|
|
143
|
-
- Data/hora da análise
|
|
144
|
-
- Score obtido
|
|
145
|
-
- Status resultante
|
|
146
|
-
- Principais gaps identificados
|
|
147
|
-
|
|
148
|
-
Isso permite rastreabilidade e melhoria contínua do processo.
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Exceções e Escalação
|
|
153
|
-
|
|
154
|
-
### Quando Escalar
|
|
155
|
-
|
|
156
|
-
Em casos excepcionais, pode-se solicitar aprovação manual:
|
|
157
|
-
|
|
158
|
-
- Urgência crítica (produção parada)
|
|
159
|
-
- Contexto especial conhecido pelo time
|
|
160
|
-
- Tech spec de spike exploratório inicial
|
|
161
|
-
|
|
162
|
-
**Processo**:
|
|
163
|
-
1. Adicionar comentário justificando exceção
|
|
164
|
-
2. Mencionar tech lead ou arquiteto
|
|
165
|
-
3. Obter aprovação explícita
|
|
166
|
-
4. Documentar decisão no card
|
|
167
|
-
|
|
168
|
-
**Label**: `QualityGate::Exceção` (substitui label automática)
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
## Métricas de Qualidade
|
|
173
|
-
|
|
174
|
-
### KPIs Sugeridos
|
|
175
|
-
|
|
176
|
-
- **Taxa de conformidade**: % de cards com score 100%
|
|
177
|
-
- **Taxa de bloqueio**: % de cards < 50%
|
|
178
|
-
- **Tempo médio de refinamento**: Tempo entre bloqueio e aprovação
|
|
179
|
-
- **Reincidência**: Cards bloqueados > 1 vez
|
|
180
|
-
|
|
181
|
-
Essas métricas ajudam a identificar gaps de processo e melhorar qualidade geral das tech specs.
|