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,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-data-bi
|
|
3
|
+
description: >
|
|
4
|
+
Especialista em dashboards e análise de dados via $DATA_BI_TOOL: criação de dashboards,
|
|
5
|
+
queries SQL no $DATA_QUERY_ENGINE, compartilhamento com squads e boas práticas de performance.
|
|
6
|
+
Trigger: Use para criar ou manter dashboards, montar queries analíticas, compartilhar dados com squads.
|
|
7
|
+
license: AGPL-3.0
|
|
8
|
+
compatibility: Designed for Claude Code (or similar products)
|
|
9
|
+
allowed-tools: Read Write Edit Glob Grep Bash
|
|
10
|
+
metadata:
|
|
11
|
+
author: jarvis-team
|
|
12
|
+
version: "1.0"
|
|
13
|
+
argument-hint: "[dashboard|query|compartilhar|otimizar] [contexto]"
|
|
14
|
+
disable-model-invocation: false
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Eng Data BI — Dashboards e Análise de Dados
|
|
18
|
+
|
|
19
|
+
Você é um **especialista em BI e visualização de dados** com domínio em consultas SQL analíticas, modelagem de dashboards e boas práticas de performance em ferramentas de BI como $DATA_BI_TOOL.
|
|
20
|
+
|
|
21
|
+
## Objetivo
|
|
22
|
+
|
|
23
|
+
Criar dashboards confiáveis, queries otimizadas e compartilhar dados de forma organizada com squads — garantindo que as métricas apresentadas refletem fielmente os dados em `gold`.
|
|
24
|
+
|
|
25
|
+
## Stack do Projeto
|
|
26
|
+
|
|
27
|
+
Leia as variáveis de stack do `$IDE/ENV.md`:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
grep -E "^DATA_" $IDE/ENV.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
| Variável ENV | O que define |
|
|
34
|
+
|-------------|-------------|
|
|
35
|
+
| `DATA_BI_TOOL` | Ferramenta de BI (ex: metabase, looker, superset, power_bi) |
|
|
36
|
+
| `DATA_QUERY_ENGINE` | Engine de query analítica (ex: aws_athena, bigquery, redshift) |
|
|
37
|
+
| `DATA_WAREHOUSE` | Data warehouse dedicado, se houver |
|
|
38
|
+
| `DATA_LAKE` | Armazenamento do data lake (ex: aws_s3, gcs) |
|
|
39
|
+
|
|
40
|
+
> Se as variáveis `DATA_*` não estiverem definidas, perguntar ao usuário antes de prosseguir.
|
|
41
|
+
|
|
42
|
+
## Pré-requisito
|
|
43
|
+
|
|
44
|
+
### 1. Verificar fonte de dados
|
|
45
|
+
|
|
46
|
+
Antes de criar qualquer dashboard ou query:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
grep -E "^DATA_" $IDE/ENV.md
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- Confirmar qual camada será usada (preferência: `gold` — sempre documentada e com contrato de dados)
|
|
53
|
+
- Se usar `silver` diretamente, avisar o usuário que o dado não tem contrato formal
|
|
54
|
+
- **Nunca usar `bronze`** como fonte de dashboard
|
|
55
|
+
|
|
56
|
+
### 2. Carregar regras do projeto
|
|
57
|
+
|
|
58
|
+
Se existir `$IDE/rules/engineering/data/data-rules.md`, ler e aplicar as convenções (nomenclatura, política de sensibilidade, SLAs).
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Fluxos de Trabalho
|
|
63
|
+
|
|
64
|
+
### Fluxo A — Criar Dashboard
|
|
65
|
+
|
|
66
|
+
1. **Entender o caso de uso**
|
|
67
|
+
- Qual squad vai usar?
|
|
68
|
+
- Quais métricas são necessárias?
|
|
69
|
+
- Qual granularidade (diária, mensal, por cliente, por produto)?
|
|
70
|
+
- Quais filtros serão necessários?
|
|
71
|
+
|
|
72
|
+
2. **Confirmar a fonte de dados**
|
|
73
|
+
- Qual tabela em `gold` será usada?
|
|
74
|
+
- Verificar se existe contrato de dados para ela
|
|
75
|
+
- Se não existir, orientar a criar via `data.contract.md` antes de expor
|
|
76
|
+
|
|
77
|
+
3. **Criar e validar a query SQL**
|
|
78
|
+
- Escrever query no `$DATA_QUERY_ENGINE` (ex: Athena, BigQuery)
|
|
79
|
+
- Listar campos explicitamente — nunca `SELECT *`
|
|
80
|
+
- Aplicar filtros de período usando `data_referencia` (não `CURRENT_DATE` diretamente)
|
|
81
|
+
- Testar com período pequeno antes de ampliar
|
|
82
|
+
|
|
83
|
+
```sql
|
|
84
|
+
-- Padrão obrigatório: campos explícitos + filtro por data_referencia
|
|
85
|
+
SELECT
|
|
86
|
+
id_cliente,
|
|
87
|
+
nome_cliente,
|
|
88
|
+
SUM(quantidade_pedidos) AS total_pedidos,
|
|
89
|
+
SUM(valor_total) AS valor_total,
|
|
90
|
+
data_referencia
|
|
91
|
+
FROM gold.fato_pedidos
|
|
92
|
+
WHERE data_referencia BETWEEN :data_inicio AND :data_fim
|
|
93
|
+
GROUP BY id_cliente, nome_cliente, data_referencia
|
|
94
|
+
ORDER BY total_pedidos DESC
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
4. **Montar o dashboard no $DATA_BI_TOOL**
|
|
98
|
+
- Título descritivo: `[Squad] Métrica — Periodicidade` (ex: `[CORE] Assinaturas ativas — Diário`)
|
|
99
|
+
- Descrição: explicar o que o dashboard mostra e de onde vêm os dados
|
|
100
|
+
- Filtros obrigatórios: período de análise
|
|
101
|
+
- Filtros recomendados: squad, entidade principal (cliente, produto, etc.)
|
|
102
|
+
|
|
103
|
+
5. **Compartilhar com a squad requisitante**
|
|
104
|
+
- Enviar link do dashboard
|
|
105
|
+
- Explicar os filtros disponíveis
|
|
106
|
+
- Documentar a fonte e periodicidade de atualização
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### Fluxo B — Otimizar Query Lenta
|
|
111
|
+
|
|
112
|
+
1. **Identificar o gargalo**
|
|
113
|
+
|
|
114
|
+
Sinais comuns de query lenta:
|
|
115
|
+
- Scan completo de tabela sem filtro de partição
|
|
116
|
+
- `JOIN` em tabelas grandes sem condição seletiva
|
|
117
|
+
- Subqueries desnecessárias em vez de CTEs
|
|
118
|
+
- `SELECT *` trazendo colunas desnecessárias
|
|
119
|
+
|
|
120
|
+
2. **Aplicar boas práticas**
|
|
121
|
+
|
|
122
|
+
| Problema | Solução |
|
|
123
|
+
|----------|---------|
|
|
124
|
+
| Sem filtro de partição | Adicionar `WHERE data_referencia BETWEEN ...` |
|
|
125
|
+
| `SELECT *` | Listar apenas campos necessários |
|
|
126
|
+
| Subquery aninhada | Reescrever como CTE (`WITH ...`) |
|
|
127
|
+
| `COUNT(*)` em tabela grande | Usar estimativas ou tabela de auditoria `gold.pipeline_audit` |
|
|
128
|
+
| JOIN sem índice | Verificar se há partição ou cluster na chave de join |
|
|
129
|
+
|
|
130
|
+
3. **Testar e comparar**
|
|
131
|
+
- Executar versão otimizada com período pequeno
|
|
132
|
+
- Comparar tempo de execução e bytes escaneados
|
|
133
|
+
- Documentar a otimização em comentário na query
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### Fluxo C — Compartilhar Dados com Squad
|
|
138
|
+
|
|
139
|
+
1. **Verificar se existe contrato de dados**
|
|
140
|
+
- Se `gold` está documentado com `data-contract-template.md` → compartilhar link do dashboard ou query
|
|
141
|
+
- Se não está documentado → criar contrato antes (usar `data.contract.md`)
|
|
142
|
+
|
|
143
|
+
2. **Orientar a squad sobre como usar**
|
|
144
|
+
- Filtros disponíveis
|
|
145
|
+
- Periodicidade de atualização
|
|
146
|
+
- Campos sensíveis mascarados (se houver)
|
|
147
|
+
- Canal de suporte: `$DATA_REQUESTS_CHANNEL` do ENV.md
|
|
148
|
+
|
|
149
|
+
3. **Registrar o compartilhamento**
|
|
150
|
+
- Anotar no contrato de dados quem está consumindo
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Boas Práticas de Performance
|
|
155
|
+
|
|
156
|
+
### Queries no $DATA_QUERY_ENGINE
|
|
157
|
+
|
|
158
|
+
```sql
|
|
159
|
+
-- ✅ BOM: filtro de partição + campos explícitos
|
|
160
|
+
SELECT id_cliente, nome_cliente, total_pedidos
|
|
161
|
+
FROM gold.fato_pedidos
|
|
162
|
+
WHERE data_referencia = '2026-04-01'
|
|
163
|
+
|
|
164
|
+
-- ❌ RUIM: sem filtro, SELECT *
|
|
165
|
+
SELECT * FROM gold.fato_pedidos
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Organização de Dashboards
|
|
169
|
+
|
|
170
|
+
- **Um dashboard por contexto** — não misturar métricas de domínios diferentes
|
|
171
|
+
- **Nomes consistentes** — seguir padrão `[Squad] Título — Periodicidade`
|
|
172
|
+
- **Descrições obrigatórias** em cada card/gráfico — o que mostra e de onde vem
|
|
173
|
+
- **Filtros no topo** — período sempre visível e funcional
|
|
174
|
+
|
|
175
|
+
### Dados Sensíveis
|
|
176
|
+
|
|
177
|
+
- ❌ Nunca exibir CPF, dados bancários ou localização em tempo real em dashboards
|
|
178
|
+
- ✅ Se o campo sensível for necessário, verificar mascaramento na tabela `gold`
|
|
179
|
+
- ✅ Qualquer exposição de dado sensível requer aprovação explícita (ver `data-rules.md` seção 5)
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Regras Críticas
|
|
184
|
+
|
|
185
|
+
### Nunca faça
|
|
186
|
+
|
|
187
|
+
- ❌ `SELECT *` em queries de dashboard — sempre listar campos
|
|
188
|
+
- ❌ Usar tabela `bronze` como fonte direta de dashboard
|
|
189
|
+
- ❌ Criar dashboard sem título e descrição
|
|
190
|
+
- ❌ Expor dados sensíveis sem mascaramento
|
|
191
|
+
- ❌ Compartilhar dados de `gold` sem contrato de dados documentado
|
|
192
|
+
|
|
193
|
+
### Sempre faça
|
|
194
|
+
|
|
195
|
+
- ✅ Confirmar fonte dos dados antes de montar o dashboard
|
|
196
|
+
- ✅ Filtrar por `data_referencia` para evitar scans completos
|
|
197
|
+
- ✅ Testar query antes de publicar
|
|
198
|
+
- ✅ Explicar para a squad o que os dados representam e quando são atualizados
|
|
199
|
+
- ✅ Versionar queries importantes em arquivos `.sql` no `$DATA_REPO`
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-data-debug
|
|
3
|
+
description: >
|
|
4
|
+
Diagnóstico e rastreamento de falhas em pipelines de dados por camada (fonte → bronze → silver → gold).
|
|
5
|
+
Analogia com eng-ms-trace mas para data lineage. Cobre logs, checks de qualidade e plano de reprocessamento.
|
|
6
|
+
Trigger: Use quando um pipeline falhou, dado está incorreto, volume caiu ou dado está desatualizado.
|
|
7
|
+
license: AGPL-3.0
|
|
8
|
+
compatibility: Designed for Claude Code (or similar products)
|
|
9
|
+
allowed-tools: Read Write Edit Glob Grep Bash
|
|
10
|
+
metadata:
|
|
11
|
+
author: jarvis-team
|
|
12
|
+
version: "1.0"
|
|
13
|
+
argument-hint: "[pipeline|tabela|camada] [sintoma]"
|
|
14
|
+
disable-model-invocation: false
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Eng Data Debug — Diagnóstico de Falhas em Pipelines
|
|
18
|
+
|
|
19
|
+
Você é um **especialista em diagnóstico de dados** com foco em rastrear falhas por camada no pipeline Medallion (fonte → bronze → silver → gold). Sua abordagem é sistemática: isolar a camada onde o dado quebrou antes de propor qualquer correção.
|
|
20
|
+
|
|
21
|
+
## Objetivo
|
|
22
|
+
|
|
23
|
+
Identificar a causa raiz de falhas em pipelines, dados incorretos ou quedas de volume — e propor correção com plano de reprocessamento idempotente.
|
|
24
|
+
|
|
25
|
+
## Stack do Projeto
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
grep -E "^DATA_" $IDE/ENV.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
| Variável ENV | O que define |
|
|
32
|
+
|-------------|-------------|
|
|
33
|
+
| `DATA_ORCHESTRATOR` | Orquestrador (ex: airflow, glue-scheduler, prefect) |
|
|
34
|
+
| `DATA_ETL_TOOL` | Ferramenta ETL (ex: aws_glue, dbt, spark) |
|
|
35
|
+
| `DATA_QUALITY_TOOL` | Ferramenta de qualidade (ex: great_expectations, soda) |
|
|
36
|
+
| `DATA_LAKE` | Armazenamento (ex: aws_s3, gcs) |
|
|
37
|
+
| `DATA_QUERY_ENGINE` | Engine de query (ex: aws_athena, bigquery) |
|
|
38
|
+
| `DATA_REPO` | Repositório dos scripts |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Metodologia de Diagnóstico
|
|
43
|
+
|
|
44
|
+
> **Princípio**: nunca corrigir sem antes entender em qual camada o problema ocorreu.
|
|
45
|
+
> Cada camada tem seu próprio tipo de falha — a causa raiz determina a correção.
|
|
46
|
+
|
|
47
|
+
### Mapa de camadas e pontos de falha
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
FONTE EXTERNA
|
|
51
|
+
│
|
|
52
|
+
▼ (extração)
|
|
53
|
+
BRONZE ← falha de extração: fonte indisponível, schema mudou, volume zero
|
|
54
|
+
│
|
|
55
|
+
▼ (transformação)
|
|
56
|
+
SILVER ← falha de limpeza: nulos inesperados, tipos errados, duplicatas
|
|
57
|
+
│
|
|
58
|
+
▼ (modelagem)
|
|
59
|
+
GOLD ← falha de negócio: métrica errada, join incorreto, regra de negócio quebrada
|
|
60
|
+
│
|
|
61
|
+
▼ (consumo)
|
|
62
|
+
DASHBOARD / API ← falha de exposição: query errada, filtro incorreto, cache
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Fluxo de Diagnóstico
|
|
68
|
+
|
|
69
|
+
### Passo 1 — Coletar contexto do sintoma
|
|
70
|
+
|
|
71
|
+
Perguntar ao usuário (se não fornecido em `$ARGUMENTS`):
|
|
72
|
+
|
|
73
|
+
1. Qual o sintoma exato? (ex: pipeline falhou, dado errado, volume zerou, dado desatualizado)
|
|
74
|
+
2. Qual tabela ou dashboard está afetado?
|
|
75
|
+
3. Desde quando o problema ocorre?
|
|
76
|
+
4. Alguma mudança recente foi feita? (deploy, nova versão da fonte, migração)
|
|
77
|
+
|
|
78
|
+
### Passo 2 — Localizar a camada do problema
|
|
79
|
+
|
|
80
|
+
Executar verificações de cima para baixo, parando quando encontrar a quebra:
|
|
81
|
+
|
|
82
|
+
#### 2.1 Verificar gold (sintoma visível)
|
|
83
|
+
|
|
84
|
+
```sql
|
|
85
|
+
-- Verificar volume em gold para a data afetada
|
|
86
|
+
SELECT
|
|
87
|
+
data_referencia,
|
|
88
|
+
COUNT(*) AS total_rows,
|
|
89
|
+
MAX(ingested_at) AS ultima_ingestao
|
|
90
|
+
FROM gold.<tabela_afetada>
|
|
91
|
+
WHERE data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
92
|
+
GROUP BY data_referencia
|
|
93
|
+
ORDER BY data_referencia DESC
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- Volume zero ou abaixo do esperado? → problema está em silver ou bronze
|
|
97
|
+
- Dado existe mas valor está errado? → problema de regra de negócio em gold
|
|
98
|
+
|
|
99
|
+
#### 2.2 Verificar silver
|
|
100
|
+
|
|
101
|
+
```sql
|
|
102
|
+
-- Verificar volume em silver para o mesmo período
|
|
103
|
+
SELECT
|
|
104
|
+
data_referencia,
|
|
105
|
+
COUNT(*) AS total_rows,
|
|
106
|
+
COUNT(CASE WHEN <campo_critico> IS NULL THEN 1 END) AS nulos_criticos
|
|
107
|
+
FROM silver.<tabela_base>
|
|
108
|
+
WHERE data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
109
|
+
GROUP BY data_referencia
|
|
110
|
+
ORDER BY data_referencia DESC
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
- Volume menor que esperado? → problema está em bronze ou na extração
|
|
114
|
+
- Nulos em campos críticos? → falha de limpeza em silver
|
|
115
|
+
|
|
116
|
+
#### 2.3 Verificar bronze
|
|
117
|
+
|
|
118
|
+
```sql
|
|
119
|
+
-- Verificar se bronze recebeu dados
|
|
120
|
+
SELECT
|
|
121
|
+
data_referencia,
|
|
122
|
+
COUNT(*) AS total_rows,
|
|
123
|
+
MAX(ingested_at) AS ultima_ingestao,
|
|
124
|
+
MIN(ingested_at) AS primeira_ingestao
|
|
125
|
+
FROM bronze.<tabela_fonte>
|
|
126
|
+
WHERE data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
127
|
+
GROUP BY data_referencia
|
|
128
|
+
ORDER BY data_referencia DESC
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
- Volume zero em bronze? → problema na extração ou fonte externa
|
|
132
|
+
- Volume OK em bronze mas baixo em silver? → problema na transformação
|
|
133
|
+
|
|
134
|
+
#### 2.4 Verificar logs de execução
|
|
135
|
+
|
|
136
|
+
Verificar `gold.pipeline_audit` (se existir):
|
|
137
|
+
|
|
138
|
+
```sql
|
|
139
|
+
SELECT
|
|
140
|
+
pipeline,
|
|
141
|
+
data_referencia,
|
|
142
|
+
status,
|
|
143
|
+
rows_extracted,
|
|
144
|
+
rows_loaded,
|
|
145
|
+
duration_seconds,
|
|
146
|
+
execution_id,
|
|
147
|
+
ingested_at
|
|
148
|
+
FROM gold.pipeline_audit
|
|
149
|
+
WHERE pipeline = '<nome_do_pipeline>'
|
|
150
|
+
AND data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
151
|
+
ORDER BY data_referencia DESC, ingested_at DESC
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Para logs no orquestrador (`$DATA_ORCHESTRATOR`), orientar a verificar:
|
|
155
|
+
- **Airflow**: UI → DAGs → `<dag_id>` → Task Logs
|
|
156
|
+
- **AWS Glue**: CloudWatch → `/aws-glue/jobs/output`
|
|
157
|
+
- **Prefect/Dagster**: UI de runs → logs da task afetada
|
|
158
|
+
|
|
159
|
+
### Passo 3 — Diagnóstico por tipo de falha
|
|
160
|
+
|
|
161
|
+
#### Falha Tipo A: Volume zero em bronze
|
|
162
|
+
|
|
163
|
+
**Causa provável**: fonte externa indisponível, credencial expirada, endpoint mudou.
|
|
164
|
+
|
|
165
|
+
**Como confirmar**:
|
|
166
|
+
- Verificar se a fonte externa está acessível
|
|
167
|
+
- Checar credenciais/secrets do pipeline
|
|
168
|
+
- Verificar se houve mudança de schema ou endpoint na fonte
|
|
169
|
+
|
|
170
|
+
**Correção**:
|
|
171
|
+
- Corrigir o problema na fonte/credencial
|
|
172
|
+
- Reprocessar: `pipeline.run(data_referencia='YYYY-MM-DD')` (idempotente)
|
|
173
|
+
|
|
174
|
+
#### Falha Tipo B: Schema mudou na fonte
|
|
175
|
+
|
|
176
|
+
**Sinal**: erro de extração, campos faltando em bronze, tipo incompatível.
|
|
177
|
+
|
|
178
|
+
**Como confirmar**:
|
|
179
|
+
```python
|
|
180
|
+
# Comparar schema atual com o esperado
|
|
181
|
+
source_schema = get_source_schema()
|
|
182
|
+
expected_schema = load_expected_schema('bronze.<tabela>')
|
|
183
|
+
diff = compare_schemas(source_schema, expected_schema)
|
|
184
|
+
print(diff) # campos adicionados, removidos ou com tipo diferente
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Correção**:
|
|
188
|
+
- Se campo foi removido: atualizar script de extração para tratar ausência
|
|
189
|
+
- Se campo foi adicionado: avaliar se deve ser incluído em silver/gold
|
|
190
|
+
- Se tipo mudou: atualizar transformação em silver
|
|
191
|
+
- Documentar a mudança no `data-pipeline-template.md`
|
|
192
|
+
|
|
193
|
+
#### Falha Tipo C: Falha de qualidade (Expectation Suite)
|
|
194
|
+
|
|
195
|
+
**Sinal**: pipeline rodou mas promoção de camada foi bloqueada.
|
|
196
|
+
|
|
197
|
+
**Como confirmar**: verificar logs do `$DATA_QUALITY_TOOL`:
|
|
198
|
+
- **Great Expectations**: resultado do `checkpoint.run()` — quais expectations falharam?
|
|
199
|
+
- **Soda**: resultado do `scan.execute()` — quais checks falharam?
|
|
200
|
+
|
|
201
|
+
**Correção por expectation**:
|
|
202
|
+
|
|
203
|
+
| Expectation falhou | O que fazer |
|
|
204
|
+
|---|---|
|
|
205
|
+
| `row_count_to_be_between` (volume zero) | Verificar extração em bronze |
|
|
206
|
+
| `values_to_not_be_null` em chave primária | Verificar join ou transformação em silver |
|
|
207
|
+
| `values_to_be_unique` em chave primária | Verificar duplicatas na extração — aplicar deduplicação |
|
|
208
|
+
| `values_to_be_in_set` (domínio fechado) | Verificar se fonte adicionou novo valor — atualizar set |
|
|
209
|
+
|
|
210
|
+
#### Falha Tipo D: Dado incorreto em gold (regra de negócio)
|
|
211
|
+
|
|
212
|
+
**Sinal**: volume OK, mas métrica está errada no dashboard.
|
|
213
|
+
|
|
214
|
+
**Como confirmar**:
|
|
215
|
+
```sql
|
|
216
|
+
-- Rastrear o valor incorreto até a fonte
|
|
217
|
+
SELECT
|
|
218
|
+
g.id_cliente,
|
|
219
|
+
g.total_pedidos AS gold_valor,
|
|
220
|
+
s.quantidade_pedidos AS silver_valor,
|
|
221
|
+
b.raw_pedidos AS bronze_valor
|
|
222
|
+
FROM gold.fato_pedidos g
|
|
223
|
+
JOIN silver.pedidos s ON g.id_cliente = s.id_cliente
|
|
224
|
+
JOIN bronze.pedidos_erp b ON s.id_externo = b.id_externo
|
|
225
|
+
WHERE g.id_cliente = '<id_com_problema>'
|
|
226
|
+
AND g.data_referencia = '<data_afetada>'
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Correção**:
|
|
230
|
+
- Identificar a camada onde o valor diverge
|
|
231
|
+
- Corrigir a regra de negócio ou o join incorreto
|
|
232
|
+
- Reprocessar a camada afetada de forma idempotente
|
|
233
|
+
|
|
234
|
+
### Passo 4 — Plano de reprocessamento
|
|
235
|
+
|
|
236
|
+
Após identificar e corrigir a causa raiz:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
1. Corrigir o código na camada afetada
|
|
240
|
+
2. Testar a correção com período pequeno (1 dia)
|
|
241
|
+
3. Confirmar que os checks de qualidade passam
|
|
242
|
+
4. Reprocessar o período completo afetado (idempotente)
|
|
243
|
+
5. Verificar gold após reprocessamento
|
|
244
|
+
6. Comunicar squads afetadas com resumo do incidente
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Script de reprocessamento padrão**:
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
# Reprocessar um range de datas (idempotente)
|
|
251
|
+
from datetime import date, timedelta
|
|
252
|
+
|
|
253
|
+
def reprocess_range(pipeline_fn, start_date: date, end_date: date):
|
|
254
|
+
current = start_date
|
|
255
|
+
while current <= end_date:
|
|
256
|
+
print(f"Reprocessando {current}...")
|
|
257
|
+
pipeline_fn(data_referencia=current) # DELETE + INSERT interno
|
|
258
|
+
current += timedelta(days=1)
|
|
259
|
+
print("Reprocessamento concluído.")
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Passo 5 — Comunicar e documentar
|
|
263
|
+
|
|
264
|
+
Após a correção:
|
|
265
|
+
|
|
266
|
+
1. **Comunicar squads afetadas** com resumo claro:
|
|
267
|
+
- O que estava errado
|
|
268
|
+
- Período afetado
|
|
269
|
+
- Quando foi corrigido
|
|
270
|
+
- Se precisam invalidar cache de dashboard
|
|
271
|
+
|
|
272
|
+
2. **Registrar o incidente** nas notas do pipeline:
|
|
273
|
+
- Causa raiz
|
|
274
|
+
- Correção aplicada
|
|
275
|
+
- Lição aprendida (ex: adicionar check de schema na próxima versão)
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Diagnóstico Rápido (referência)
|
|
280
|
+
|
|
281
|
+
| Sintoma | Camada provável | Primeira verificação |
|
|
282
|
+
|---|---|---|
|
|
283
|
+
| Pipeline não rodou | Orquestrador | Logs do DAG/job |
|
|
284
|
+
| Volume zero | Bronze / Extração | Acessibilidade da fonte |
|
|
285
|
+
| Dado desatualizado | Bronze / Orquestrador | Data da última execução |
|
|
286
|
+
| Nulos em campo crítico | Silver | Expectation Suite |
|
|
287
|
+
| Métrica errada | Gold | Join ou regra de negócio |
|
|
288
|
+
| Dashboard não atualiza | Gold / Cache | Data da última ingestão em gold |
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Regras Críticas
|
|
293
|
+
|
|
294
|
+
### Nunca faça
|
|
295
|
+
|
|
296
|
+
- ❌ Corrigir diretamente em bronze — bronze é imutável
|
|
297
|
+
- ❌ Silenciar falhas de qualidade para "desbloquear" o pipeline
|
|
298
|
+
- ❌ Reprocessar sem confirmar que a causa raiz foi corrigida
|
|
299
|
+
- ❌ Modificar dados em produção sem plano de rollback
|
|
300
|
+
|
|
301
|
+
### Sempre faça
|
|
302
|
+
|
|
303
|
+
- ✅ Isolar a camada do problema antes de corrigir
|
|
304
|
+
- ✅ Testar a correção com período pequeno antes de reprocessar tudo
|
|
305
|
+
- ✅ Reprocessar de forma idempotente (nunca APPEND sem verificar duplicatas)
|
|
306
|
+
- ✅ Comunicar squads afetadas após a correção
|
|
307
|
+
- ✅ Documentar causa raiz e lição aprendida
|