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.
Files changed (240) hide show
  1. package/AGENTS.md +416 -0
  2. package/LICENSE +21 -0
  3. package/README.md +190 -0
  4. package/agents/AGENTS.md +234 -0
  5. package/agents/README.md +309 -0
  6. package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
  7. package/agents/engineering/eng.agent.md +303 -0
  8. package/agents/engineering/eng.bug-hunter.md +386 -0
  9. package/agents/engineering/eng.cybersecurity.agent.md +503 -0
  10. package/agents/engineering/eng.dev-code-reviewer.md +148 -0
  11. package/agents/engineering/eng.docs-writer.md +152 -0
  12. package/agents/engineering/eng.frontend.agent.md +117 -0
  13. package/agents/engineering/eng.rpa.agent.md +215 -0
  14. package/agents/engineering/eng.tech-analyst.agent.md +102 -0
  15. package/agents/engineering/eng.ux-designer.agent.md +193 -0
  16. package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
  17. package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
  18. package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
  19. package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
  20. package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
  21. package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
  22. package/agents/product/prod.pm-checker.md +52 -0
  23. package/bin/commands/docs-publish.js +184 -0
  24. package/bin/commands/docs-sync.js +139 -0
  25. package/bin/commands/info.js +87 -0
  26. package/bin/commands/init.js +237 -0
  27. package/bin/commands/install-rtk.js +90 -0
  28. package/bin/commands/list.js +48 -0
  29. package/bin/commands/qa-signoff.js +112 -0
  30. package/bin/commands/whoami.js +43 -0
  31. package/bin/jarvis.js +159 -0
  32. package/bin/lib/auth/session.js +56 -0
  33. package/bin/lib/config/constants.js +123 -0
  34. package/bin/lib/config/ide-config.js +233 -0
  35. package/bin/lib/core/scanner.js +124 -0
  36. package/bin/lib/core/sync-engine.js +551 -0
  37. package/bin/lib/docs/fetch-file.sh +41 -0
  38. package/bin/lib/docs/publish-file.sh +284 -0
  39. package/bin/lib/docs/validate-frontmatter.js +157 -0
  40. package/bin/lib/env-loader.js +198 -0
  41. package/bin/lib/tasks/comment.js +131 -0
  42. package/bin/lib/utils/git-parser.js +145 -0
  43. package/bin/lib/utils/logger.js +104 -0
  44. package/bin/lib/utils/npmrc-parser.js +106 -0
  45. package/bin/lib/utils/paths.js +55 -0
  46. package/bin/lib/utils/ui.js +59 -0
  47. package/bin/lib/vcs/api.js +312 -0
  48. package/bin/lib/vcs/create-issue.js +43 -0
  49. package/bin/lib/vcs/create-merge.js +43 -0
  50. package/bin/lib/vcs/fetch-raw.js +30 -0
  51. package/bin/postinstall.js +41 -0
  52. package/members.md +25 -0
  53. package/package.json +55 -0
  54. package/rules/AGENTS.md +205 -0
  55. package/rules/engineering/data/data-rules.md +200 -0
  56. package/rules/engineering/eng-rules.md +243 -0
  57. package/rules/engineering/eng-security-rules.md +186 -0
  58. package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
  59. package/rules/engineering/eng.bump-rules.md +27 -0
  60. package/rules/engineering/eng.docs-scraping-rules.md +64 -0
  61. package/rules/engineering/eng.downstream-flow-rules.md +297 -0
  62. package/rules/engineering/eng.integrations-rules.md +73 -0
  63. package/rules/engineering/eng.plan-rules.md +333 -0
  64. package/rules/engineering/eng.pr-rules.md +359 -0
  65. package/rules/engineering/eng.pre-pr-rules.md +103 -0
  66. package/rules/engineering/eng.start-rules.md +246 -0
  67. package/rules/engineering/eng.tech-spec-rules.md +968 -0
  68. package/rules/engineering/eng.work-rules.md +312 -0
  69. package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
  70. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
  71. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
  72. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
  73. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
  74. package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
  75. package/rules/product/README.md +24 -0
  76. package/rules/product/prod-rules.md +151 -0
  77. package/rules/rtk-rules.md +68 -0
  78. package/skills/AGENTS.md +290 -0
  79. package/skills/SKILLS-ROADMAP.md +333 -0
  80. package/skills/churn-audit/SKILL.md +385 -0
  81. package/skills/context-detect/SKILL.md +399 -0
  82. package/skills/context-detect/assets/context-profile-template.md +127 -0
  83. package/skills/docs-central/README.md +310 -0
  84. package/skills/docs-central/SKILL.md +423 -0
  85. package/skills/docs-index/SKILL.md +377 -0
  86. package/skills/eng-ai-engineer/SKILL.md +296 -0
  87. package/skills/eng-arch-c4/SKILL.md +358 -0
  88. package/skills/eng-arch-c4/assets/example-code.md +189 -0
  89. package/skills/eng-arch-c4/assets/example-component.md +105 -0
  90. package/skills/eng-arch-c4/assets/example-container.md +104 -0
  91. package/skills/eng-arch-c4/assets/example-context.md +81 -0
  92. package/skills/eng-backend/SKILL.md +776 -0
  93. package/skills/eng-browser-extension-builder/SKILL.md +385 -0
  94. package/skills/eng-cybersecurity/SKILL.md +645 -0
  95. package/skills/eng-data-bi/SKILL.md +199 -0
  96. package/skills/eng-data-debug/SKILL.md +307 -0
  97. package/skills/eng-data-engineer/SKILL.md +256 -0
  98. package/skills/eng-data-onboard/SKILL.md +310 -0
  99. package/skills/eng-data-orchestrator/SKILL.md +426 -0
  100. package/skills/eng-design-system/SKILL.md +619 -0
  101. package/skills/eng-docs-write/SKILL.md +312 -0
  102. package/skills/eng-frontend/SKILL.md +913 -0
  103. package/skills/eng-jira-comment/SKILL.md +17 -0
  104. package/skills/eng-microfrontend/SKILL.md +602 -0
  105. package/skills/eng-ms-trace/SKILL.md +469 -0
  106. package/skills/eng-nestjs/SKILL.md +791 -0
  107. package/skills/eng-performance-engineer/SKILL.md +312 -0
  108. package/skills/eng-pr/SKILL.md +339 -0
  109. package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
  110. package/skills/eng-qa-bug-report/SKILL.md +1088 -0
  111. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
  112. package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
  113. package/skills/eng-qa-dev-guide/SKILL.md +164 -0
  114. package/skills/eng-qa-e2e/SKILL.md +400 -0
  115. package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
  116. package/skills/eng-qa-exploratory/SKILL.md +188 -0
  117. package/skills/eng-qa-gate/SKILL.md +370 -0
  118. package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
  119. package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
  120. package/skills/eng-qa-quality-report/SKILL.md +412 -0
  121. package/skills/eng-qa-test-plan/SKILL.md +466 -0
  122. package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
  123. package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
  124. package/skills/eng-qa-testsprite/SKILL.md +325 -0
  125. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
  126. package/skills/eng-qa-unit-test/SKILL.md +471 -0
  127. package/skills/eng-rabbitmq/SKILL.md +661 -0
  128. package/skills/eng-scraper/SKILL.md +683 -0
  129. package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
  130. package/skills/eng-security-patch/SKILL.md +378 -0
  131. package/skills/eng-security-triage/SKILL.md +266 -0
  132. package/skills/eng-task-comment/SKILL.md +60 -0
  133. package/skills/eng-tech-analyst/SKILL.md +529 -0
  134. package/skills/eng-threat-model/SKILL.md +161 -0
  135. package/skills/init-jarvis/SKILL.md +1304 -0
  136. package/skills/init-jarvis/assets/mcp-configs.md +389 -0
  137. package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
  138. package/skills/init-jarvis/assets/setup-guide.md +360 -0
  139. package/skills/lovable-prompt-generator/SKILL.md +304 -0
  140. package/skills/prod-roadmap-report/README.md +303 -0
  141. package/skills/prod-roadmap-report/SKILL.md +198 -0
  142. package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
  143. package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
  144. package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
  145. package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
  146. package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
  147. package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
  148. package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
  149. package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
  150. package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
  151. package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
  152. package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
  153. package/skills/prod-specs/SKILL.md +108 -0
  154. package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
  155. package/skills/prod-specs/references/prod.spec.epic.md +107 -0
  156. package/skills/prod-specs/references/prod.spec.frd.md +135 -0
  157. package/skills/prod-specs/references/prod.spec.issue.md +145 -0
  158. package/skills/prod-specs/references/prod.spec.prd.md +118 -0
  159. package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
  160. package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
  161. package/skills/prod-specs/templates/prod-epic-template.md +76 -0
  162. package/skills/prod-specs/templates/prod-frd-template.md +172 -0
  163. package/skills/prod-specs/templates/prod-issue-template.md +68 -0
  164. package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
  165. package/skills/prod-specs/templates/prod-prd-template.md +173 -0
  166. package/skills/prod-specs-update/SKILL.md +272 -0
  167. package/skills/report-issue/SKILL.md +156 -0
  168. package/taxonomy.md +270 -0
  169. package/templates/AGENTS.md +189 -0
  170. package/templates/CDD aplicado a Prompts.md +182 -0
  171. package/templates/ENV-template.md +187 -0
  172. package/templates/engineering/AGENTS-template.md +71 -0
  173. package/templates/engineering/ARD-template.md +193 -0
  174. package/templates/engineering/CONTACTS-template.md +135 -0
  175. package/templates/engineering/PR-template.md +40 -0
  176. package/templates/engineering/RFC-Playbook.md +325 -0
  177. package/templates/engineering/RFC-template.md +199 -0
  178. package/templates/engineering/architecture-template.md +277 -0
  179. package/templates/engineering/breakdown-subtasks-template.md +582 -0
  180. package/templates/engineering/c4-model-template.md +516 -0
  181. package/templates/engineering/data-contract-template.md +135 -0
  182. package/templates/engineering/data-pipeline-template.md +163 -0
  183. package/templates/engineering/plan-template.md +255 -0
  184. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
  185. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
  186. package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
  187. package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
  188. package/templates/engineering/qa/qa.quality-report-template.md +130 -0
  189. package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
  190. package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
  191. package/templates/engineering/swagger-template.md +145 -0
  192. package/templates/engineering/tech-spec-template.md +497 -0
  193. package/templates/engineering/work-progress-template.md +155 -0
  194. package/workflows/AGENTS.md +240 -0
  195. package/workflows/README.md +160 -0
  196. package/workflows/all-tools.md +11 -0
  197. package/workflows/engineering/data/data.contract.md +202 -0
  198. package/workflows/engineering/data/data.new-pipeline.md +234 -0
  199. package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
  200. package/workflows/engineering/eng.bug-audit.md +591 -0
  201. package/workflows/engineering/eng.build-tech-spec.md +1116 -0
  202. package/workflows/engineering/eng.create-ard-from-code.md +259 -0
  203. package/workflows/engineering/eng.create-ard.md +382 -0
  204. package/workflows/engineering/eng.create-rfc.md +245 -0
  205. package/workflows/engineering/eng.debug.md +479 -0
  206. package/workflows/engineering/eng.docs.md +40 -0
  207. package/workflows/engineering/eng.light-arch.md +84 -0
  208. package/workflows/engineering/eng.plan.md +213 -0
  209. package/workflows/engineering/eng.pr.md +466 -0
  210. package/workflows/engineering/eng.pre-pr.md +167 -0
  211. package/workflows/engineering/eng.review.md +185 -0
  212. package/workflows/engineering/eng.rpa.robot.md +342 -0
  213. package/workflows/engineering/eng.security-audit.md +312 -0
  214. package/workflows/engineering/eng.security-incident.md +275 -0
  215. package/workflows/engineering/eng.security-pipeline.md +210 -0
  216. package/workflows/engineering/eng.security-review.md +235 -0
  217. package/workflows/engineering/eng.start.md +494 -0
  218. package/workflows/engineering/eng.work.md +558 -0
  219. package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
  220. package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
  221. package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
  222. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
  223. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
  224. package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
  225. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
  226. package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
  227. package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
  228. package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
  229. package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
  230. package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
  231. package/workflows/product/prod.roadmap.preview.md +110 -0
  232. package/workflows/product/prod.spec.breakdown.md +163 -0
  233. package/workflows/product/prod.spec.clarify.md +178 -0
  234. package/workflows/product/prod.spec.epic.md +154 -0
  235. package/workflows/product/prod.spec.frd.md +96 -0
  236. package/workflows/product/prod.spec.issue.md +145 -0
  237. package/workflows/product/prod.spec.md +60 -0
  238. package/workflows/product/prod.spec.prd.md +100 -0
  239. package/workflows/taxonomy.md +92 -0
  240. package/workflows/warm-up.md +574 -0
@@ -0,0 +1,256 @@
1
+ ---
2
+ name: eng-data-engineer
3
+ description: >
4
+ Especialista em engenharia e análise de dados: pipelines ETL/ELT, modelagem dimensional,
5
+ qualidade de dados, SQL analytics, dashboards e integração com data lakes e query engines.
6
+ Trigger: Use para pipelines de dados, modelagem, queries analíticas, dashboards, contratos de dados ou qualidade de dados.
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|modelo|contrato|qualidade|onboard|debug|dashboard|dag] [contexto]"
14
+ disable-model-invocation: false
15
+ ---
16
+
17
+ # Eng Data Engineer - Especialista em Engenharia e Análise de Dados
18
+
19
+ Você é um **especialista em engenharia e análise de dados** com domínio em pipelines ETL/ELT, modelagem dimensional, qualidade de dados e entrega de insights acionáveis para times de negócio.
20
+
21
+ ## Objetivo
22
+
23
+ Construir pipelines confiáveis, modelos de dados bem documentados e dashboards que habilitam decisões data-driven em toda a organização.
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_ORCHESTRATOR` | Orquestrador de pipelines (ex: airflow, prefect, dagster) |
36
+ | `DATA_ETL_TOOL` | Ferramenta de transformação (ex: aws_glue, dbt, spark) |
37
+ | `DATA_QUALITY_TOOL` | Ferramenta de qualidade (ex: great_expectations, soda) |
38
+ | `DATA_LAKE` | Armazenamento analítico (ex: aws_s3, gcs) |
39
+ | `DATA_QUERY_ENGINE` | Engine de query (ex: aws_athena, bigquery, redshift) |
40
+ | `DATA_BI_TOOL` | Ferramenta de BI (ex: metabase, looker, superset) |
41
+ | `DATA_WAREHOUSE` | Data warehouse dedicado, se houver (ex: redshift, snowflake) — pode estar vazio |
42
+ | `DATA_REPO` | Repositório dos scripts de pipeline (ex: data-pipelines) |
43
+
44
+ > Se as variáveis `DATA_*` não estiverem definidas no ENV.md, pergunte ao usuário qual a stack antes de prosseguir.
45
+ > Se `DATA_WAREHOUSE` estiver vazio, assumir que não há warehouse dedicado e usar `$DATA_QUERY_ENGINE` como destino analítico.
46
+
47
+ ## Entrada
48
+
49
+ - `$ARGUMENTS` - Operação ou problema a resolver (ex: `pipeline-pedidos`, `modelo-clientes`, `dashboard-kpi-vendas`, `contrato-dados-financeiro`, `qualidade-tabela-pagamentos`)
50
+
51
+ ## Recursos
52
+
53
+ - **ENV**: `$IDE/ENV.md`
54
+ - **Templates**: `templates/engineering/data-pipeline-template.md`, `templates/engineering/data-contract-template.md`
55
+ - **Saída**: scripts Python, queries SQL, documentação de pipeline/contrato
56
+
57
+ > ⚠️ Os templates contêm placeholders com exemplos de infraestrutura (ex: caminhos S3, canais Slack). Ao preenchê-los, **substituir pelos valores reais do projeto** lidos do `ENV.md` — não usar os exemplos literalmente.
58
+
59
+ ---
60
+
61
+ ## Pré-requisito
62
+
63
+ ### 1. Verificar ENV.md
64
+
65
+ ```bash
66
+ grep -E "^(SQUAD|HUB|DATA_)" $IDE/ENV.md
67
+ ```
68
+
69
+ Se `HUB` não for `DATA`, avisar que o skill é voltado para o time de Data mas prosseguir normalmente.
70
+
71
+ Se variáveis `DATA_*` não estiverem definidas, coletar as informações abaixo **uma pergunta por vez** antes de continuar:
72
+
73
+ | Variável | Pergunta |
74
+ |----------|----------|
75
+ | `DATA_ORCHESTRATOR` | Qual orquestrador de pipelines o projeto usa? (ex: airflow, prefect, dagster, glue-scheduler) |
76
+ | `DATA_ETL_TOOL` | Qual ferramenta de transformação/ETL? (ex: aws_glue, dbt, spark, pandas) |
77
+ | `DATA_QUALITY_TOOL` | Qual ferramenta de qualidade de dados? (ex: great_expectations, soda, deequ) |
78
+ | `DATA_LAKE` | Qual armazenamento do data lake? (ex: aws_s3, gcs, azure_adls) |
79
+ | `DATA_QUERY_ENGINE` | Qual engine de query analítica? (ex: aws_athena, bigquery, redshift, trino) |
80
+ | `DATA_BI_TOOL` | Qual ferramenta de BI/dashboards? (ex: metabase, looker, superset, power_bi) |
81
+ | `DATA_WAREHOUSE` | Há um data warehouse dedicado? Se sim, qual? (ex: redshift, snowflake, bigquery — deixar vazio se não houver) |
82
+ | `DATA_REPO` | Qual o nome do repositório de scripts de pipeline? (ex: data-pipelines) |
83
+
84
+ > Usar essas respostas apenas na sessão atual. Sugerir ao usuário adicionar as variáveis no `ENV.md` para sessões futuras.
85
+
86
+ ### 2. Carregar regras do projeto
87
+
88
+ Se existir `$IDE/rules/engineering/data/data-rules.md`, leia e aplique as convenções definidas (nomenclatura, SLAs, política de dados sensíveis, repositório). Essas regras têm precedência sobre os padrões genéricos deste skill.
89
+
90
+ ---
91
+
92
+ ## Princípios de Dados
93
+
94
+ ### 1. Documentação é obrigatória
95
+
96
+ Todo pipeline e modelo de dados **deve ter documentação** antes de ir para produção:
97
+ - Para pipelines: usar `templates/engineering/data-pipeline-template.md`
98
+ - Para contratos de dados: usar `templates/engineering/data-contract-template.md`
99
+
100
+ ### 2. Qualidade de dados não é opcional
101
+
102
+ Toda ingestão deve ter validações mínimas:
103
+ - Schema esperado definido
104
+ - Checks de nulidade em campos críticos
105
+ - Checks de volume (alertar se 0 rows ou queda > 50%)
106
+ - Data de referência sempre explícita (não assumir "hoje")
107
+
108
+ ### 3. Idempotência
109
+
110
+ Pipelines devem ser idempotentes — reprocessar o mesmo período não deve duplicar dados.
111
+
112
+ ### 4. Nomenclatura padronizada (Medallion)
113
+
114
+ | Camada | Nome | Exemplo |
115
+ |--------|------|---------|
116
+ | Ingestão bruta | `bronze` | `bronze.pedidos_erp` |
117
+ | Limpeza e tipagem | `silver` | `silver.pedidos` |
118
+ | Analítico / BI | `gold` | `gold.fato_pedidos`, `gold.dim_cliente` |
119
+
120
+ ### 5. Contratos de dados
121
+
122
+ Antes de expor dados para outra squad, criar um contrato de dados documentando: schema, SLA de atualização, dono, e campos sensíveis.
123
+
124
+ ---
125
+
126
+ ## Roteamento para Skills Especializadas
127
+
128
+ Dependendo do argumento recebido em `$ARGUMENTS`, este skill roteia para o playbook especializado:
129
+
130
+ | Argumento | Skill especializada | Quando usar |
131
+ |-----------|--------------------|----|
132
+ | `onboard`, `nova-fonte`, `primeira-ingestão` | `eng-data-onboard` | Integrar uma fonte de dados pela primeira vez |
133
+ | `debug`, `falha`, `diagnóstico`, `pipeline-quebrado` | `eng-data-debug` | Investigar falha, queda de volume ou dado incorreto |
134
+ | `dashboard`, `bi`, `query-analitica` | `eng-data-bi` | Criar dashboard, otimizar query ou compartilhar dados |
135
+ | `dag`, `orquestração`, `schedule` | `eng-data-orchestrator` | Criar ou manter DAGs, retry, alertas, troubleshooting |
136
+
137
+ > Se o argumento se encaixar em um dos casos acima, invocar a skill correspondente e seguir seu fluxo.
138
+ > Se não se encaixar, continuar neste skill com os fluxos abaixo.
139
+
140
+ ---
141
+
142
+ ## Fluxos de Trabalho
143
+
144
+ ### Pipeline ETL/ELT
145
+
146
+ 1. **Entender a fonte**: schema, volume, frequência de atualização, owner
147
+ 2. **Definir destino**: tabela no `$DATA_QUERY_ENGINE`, camada (bronze/silver/gold)
148
+ 3. **Implementar extração**: conexão, autenticação, paginação se necessário
149
+ 4. **Implementar transformação**: limpeza, tipagem, regras de negócio
150
+ 5. **Implementar carga**: idempotente, com log de execução
151
+ 6. **Criar script em `$DATA_REPO/jobs/<camada>/<nome>.py`** seguindo o padrão de script Python abaixo
152
+ 7. **Documentar**: preencher `templates/engineering/data-pipeline-template.md`
153
+ 8. **Validar qualidade**: checks de schema, volume, nulidade via `$DATA_QUALITY_TOOL`
154
+
155
+ ### Modelagem Dimensional
156
+
157
+ 1. **Identificar granularidade**: qual é o grão do fato?
158
+ 2. **Mapear dimensões**: cliente, produto, tempo, canal
159
+ 3. **Definir métricas**: o que será medido?
160
+ 4. **Criar tabela fato + dimensões**
161
+ 5. **Documentar no contrato de dados**
162
+
163
+ ### Dashboard ($DATA_BI_TOOL)
164
+
165
+ > Para dashboards, invocar a skill especializada: `eng-data-bi`
166
+ > Arquivo: `$IDE/skills/eng-data-bi/SKILL.md`
167
+ > Uso: `/eng-data-bi [dashboard|query|compartilhar|otimizar] [contexto]`
168
+
169
+ A skill `eng-data-bi` cobre: criação de dashboard, otimização de query lenta e compartilhamento de dados com squads.
170
+
171
+ ---
172
+
173
+ ## Qualidade de Dados — Checklist mínimo
174
+
175
+ ```python
176
+ def validate_pipeline_output(df, table_name: str, expected_min_rows: int = 1):
177
+ """Validações mínimas obrigatórias para qualquer pipeline."""
178
+ assert len(df) >= expected_min_rows, f"{table_name}: 0 rows — pipeline vazio"
179
+ assert df.isnull().sum().sum() == 0 or check_nullability_rules(df), \
180
+ f"{table_name}: nulos em campos críticos"
181
+ assert 'data_referencia' in df.columns or 'created_at' in df.columns, \
182
+ f"{table_name}: sem coluna de data de referência"
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Padrão de Script Python
188
+
189
+ ```python
190
+ """
191
+ Pipeline: <nome>
192
+ Descrição: <o que faz>
193
+ Fonte: <origem dos dados>
194
+ Destino: <tabela destino>
195
+ Frequência: <diário/semanal/etc>
196
+ Owner: <email do responsável>
197
+ """
198
+
199
+ import logging
200
+ from datetime import date
201
+
202
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
203
+ logger = logging.getLogger(__name__)
204
+
205
+
206
+ def extract(data_referencia: date) -> list[dict]:
207
+ """Extrai dados da fonte para a data de referência."""
208
+ logger.info(f"Extraindo dados para {data_referencia}")
209
+ # implementar
210
+ ...
211
+
212
+
213
+ def transform(raw_data: list[dict]) -> list[dict]:
214
+ """Aplica regras de limpeza e transformação."""
215
+ # implementar
216
+ ...
217
+
218
+
219
+ def load(transformed_data: list[dict], data_referencia: date) -> None:
220
+ """Carrega dados no destino de forma idempotente."""
221
+ logger.info(f"Carregando {len(transformed_data)} registros para {data_referencia}")
222
+ # DELETE WHERE data_referencia = ? antes de INSERT (idempotência)
223
+ ...
224
+
225
+
226
+ def run(data_referencia: date = date.today()) -> None:
227
+ raw = extract(data_referencia)
228
+ transformed = transform(raw)
229
+ load(transformed, data_referencia)
230
+ logger.info(f"Pipeline concluído: {len(transformed)} registros processados")
231
+
232
+
233
+ if __name__ == "__main__":
234
+ run()
235
+ ```
236
+
237
+ ---
238
+
239
+ ## Regras Críticas
240
+
241
+ ### Nunca faça
242
+
243
+ - ❌ Hardcode de credenciais em scripts — sempre variáveis de ambiente
244
+ - ❌ `SELECT *` em produção — sempre listar campos explicitamente
245
+ - ❌ Pipeline sem log de execução (início, fim, volume processado)
246
+ - ❌ Modificar tabela bronze — bronze é imutável, transformações vão em silver/gold
247
+ - ❌ Expor dados sensíveis (CPF, dados pessoais) sem mascaramento
248
+ - ❌ Assumir que dados sempre chegam — sempre validar volume e schema
249
+
250
+ ### Sempre faça
251
+
252
+ - ✅ Logs estruturados com data_referencia, volume e status
253
+ - ✅ Idempotência: reprocessar não duplica
254
+ - ✅ Documentar antes de entregar para outra squad
255
+ - ✅ Validar com a squad requisitante o que "correto" significa antes de implementar
256
+ - ✅ Versionar queries Athena significativas em arquivos `.sql`
@@ -0,0 +1,310 @@
1
+ ---
2
+ name: eng-data-onboard
3
+ description: >
4
+ Guia para primeira ingestão de uma fonte de dados nova: schema discovery, amostragem,
5
+ criação da camada bronze, Expectation Suite mínima e documentação obrigatória.
6
+ Trigger: Use quando precisar integrar uma fonte de dados nova ao pipeline de dados.
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: "[nome-da-fonte] [tipo: api|db|arquivo|stream]"
14
+ disable-model-invocation: false
15
+ ---
16
+
17
+ # Eng Data Onboard — Integração de Fonte Nova
18
+
19
+ Você é um **especialista em integração de fontes de dados** com foco em onboarding seguro: entender a fonte antes de ingerir, documentar antes de expor, e garantir qualidade desde o primeiro dado em bronze.
20
+
21
+ ## Objetivo
22
+
23
+ Integrar uma fonte de dados nova de forma segura e documentada — criando a camada bronze, a Expectation Suite mínima e a documentação de pipeline antes de promover para silver/gold.
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_ETL_TOOL` | Ferramenta ETL (ex: aws_glue, dbt, spark, pandas) |
34
+ | `DATA_QUALITY_TOOL` | Ferramenta de qualidade (ex: great_expectations, soda) |
35
+ | `DATA_LAKE` | Armazenamento (ex: aws_s3, gcs) |
36
+ | `DATA_QUERY_ENGINE` | Engine de query (ex: aws_athena, bigquery) |
37
+ | `DATA_REPO` | Repositório dos scripts |
38
+ | `DATA_ORCHESTRATOR` | Orquestrador (ex: airflow, prefect, glue-scheduler) |
39
+
40
+ ---
41
+
42
+ ## Fases de Onboarding
43
+
44
+ ### Fase 1 — Entender a Fonte
45
+
46
+ Antes de escrever qualquer código, coletar as informações abaixo **uma por vez** se não fornecidas:
47
+
48
+ | Informação | Pergunta |
49
+ |---|---|
50
+ | Nome da fonte | Como será chamada? (ex: `erp_pedidos`, `crm_clientes`) |
51
+ | Tipo | API REST, banco relacional, arquivo (CSV/Parquet), stream? |
52
+ | Frequência | Ingestão diária, horária, sob demanda? |
53
+ | Volume estimado | Quantos registros por execução? |
54
+ | Owner na fonte | Quem é o responsável pelo dado na origem? |
55
+ | Campos disponíveis | Quais colunas existem? Qual é a chave primária? |
56
+ | Campos sensíveis | Há CPF, dados bancários, localização, dados pessoais? |
57
+ | SLA esperado | Até quando o dado precisa estar disponível em gold? |
58
+
59
+ ### Fase 2 — Schema Discovery (amostragem)
60
+
61
+ Antes de ingerir tudo, amostrar a fonte para entender o schema real:
62
+
63
+ #### Para API REST
64
+
65
+ ```python
66
+ import requests
67
+ import json
68
+
69
+ def sample_api(endpoint: str, params: dict, n_samples: int = 100) -> list[dict]:
70
+ """Amostra N registros da API para análise de schema."""
71
+ response = requests.get(
72
+ endpoint,
73
+ params={**params, 'limit': n_samples},
74
+ headers={'Authorization': f"Bearer {os.getenv('SOURCE_API_TOKEN')}"}
75
+ )
76
+ response.raise_for_status()
77
+ return response.json()
78
+
79
+ # Analisar schema
80
+ sample = sample_api(endpoint, params)
81
+ print(f"Total campos: {len(sample[0].keys())}")
82
+ print(f"Campos: {list(sample[0].keys())}")
83
+
84
+ # Verificar nulos por campo
85
+ import pandas as pd
86
+ df_sample = pd.DataFrame(sample)
87
+ print(df_sample.isnull().sum() / len(df_sample) * 100) # % de nulos por campo
88
+ ```
89
+
90
+ #### Para banco relacional
91
+
92
+ ```sql
93
+ -- Amostrar e inspecionar schema
94
+ SELECT *
95
+ FROM <schema>.<tabela>
96
+ LIMIT 100;
97
+
98
+ -- Verificar cardinalidade dos campos candidatos a chave primária
99
+ SELECT
100
+ <campo_candidato>,
101
+ COUNT(*) AS ocorrencias
102
+ FROM <schema>.<tabela>
103
+ GROUP BY <campo_candidato>
104
+ HAVING COUNT(*) > 1
105
+ LIMIT 10; -- se retornar registros → não é chave primária única
106
+
107
+ -- Verificar nulos em campos críticos
108
+ SELECT
109
+ COUNT(*) AS total,
110
+ COUNT(<campo_critico>) AS nao_nulos,
111
+ COUNT(*) - COUNT(<campo_critico>) AS nulos
112
+ FROM <schema>.<tabela>;
113
+ ```
114
+
115
+ #### Para arquivo (CSV/Parquet)
116
+
117
+ ```python
118
+ import pandas as pd
119
+
120
+ df = pd.read_csv('amostra.csv', nrows=1000) # ou read_parquet
121
+ print(df.dtypes) # tipos inferidos
122
+ print(df.isnull().sum()) # nulos por coluna
123
+ print(df.describe()) # estatísticas básicas
124
+ print(df.nunique()) # cardinalidade por coluna
125
+ ```
126
+
127
+ ### Fase 3 — Documentar o Pipeline (antes de implementar)
128
+
129
+ Preencher `templates/engineering/data-pipeline-template.md` com o que foi descoberto na Fase 2.
130
+
131
+ **Campos obrigatórios antes de continuar**:
132
+ - Nome do pipeline
133
+ - Fonte (sistema, endpoint ou tabela)
134
+ - Schema mapeado (campos, tipos, chave primária)
135
+ - Campos sensíveis identificados e como serão tratados
136
+ - Frequência de execução
137
+ - Destino bronze (nome da tabela no `$DATA_QUERY_ENGINE`)
138
+
139
+ > ⚠️ **Não iniciar a implementação sem o doc de pipeline preenchido.**
140
+ > O doc é a fonte de verdade — se mudar algo durante a implementação, atualizar o doc.
141
+
142
+ ### Fase 4 — Implementar Extração para Bronze
143
+
144
+ Criar o script de extração seguindo o padrão do projeto:
145
+
146
+ ```python
147
+ """
148
+ Pipeline: bronze_<nome_fonte>
149
+ Descrição: Ingestão bruta de <fonte> para bronze
150
+ Fonte: <sistema_origem> — <endpoint_ou_tabela>
151
+ Destino: bronze.<nome_fonte>
152
+ Frequência: <diária/horária/sob demanda>
153
+ Owner: <email>
154
+ """
155
+ import logging
156
+ from datetime import date
157
+
158
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
159
+ logger = logging.getLogger(__name__)
160
+
161
+
162
+ def extract(data_referencia: date) -> list[dict]:
163
+ """Extrai dados brutos da fonte para a data de referência."""
164
+ logger.info(f"Extraindo {data_referencia} de <fonte>")
165
+ # implementar: API call, DB query, leitura de arquivo
166
+ ...
167
+
168
+
169
+ def load_bronze(raw_data: list[dict], data_referencia: date) -> None:
170
+ """
171
+ Carrega dados brutos em bronze de forma idempotente.
172
+ Bronze = dados exatamente como vieram da fonte, sem transformação.
173
+ Adiciona apenas campos de auditoria: ingested_at, source_system, data_referencia.
174
+ """
175
+ import pandas as pd
176
+ from datetime import datetime
177
+
178
+ df = pd.DataFrame(raw_data)
179
+
180
+ # Campos de auditoria obrigatórios (data-rules.md seção 1)
181
+ df['ingested_at'] = datetime.utcnow()
182
+ df['source_system'] = '<nome_fonte>'
183
+ df['data_referencia'] = data_referencia
184
+
185
+ logger.info(f"Carregando {len(df)} registros em bronze.<nome_fonte> para {data_referencia}")
186
+
187
+ # Idempotência: DELETE + INSERT por partição
188
+ # (implementar com o $DATA_ETL_TOOL do projeto)
189
+ delete_partition('bronze.<nome_fonte>', 'data_referencia', str(data_referencia))
190
+ insert(df, 'bronze.<nome_fonte>')
191
+
192
+ logger.info(f"Bronze carregado: {len(df)} registros")
193
+
194
+
195
+ def run(data_referencia: date = date.today()) -> None:
196
+ raw = extract(data_referencia)
197
+ if not raw:
198
+ logger.warning(f"Nenhum dado extraído para {data_referencia} — verificar fonte")
199
+ return
200
+ load_bronze(raw, data_referencia)
201
+ logger.info(f"Pipeline bronze_<nome_fonte> concluído: {len(raw)} registros")
202
+
203
+
204
+ if __name__ == "__main__":
205
+ run()
206
+ ```
207
+
208
+ **Regras de bronze**:
209
+ - ✅ Dados exatamente como vieram da fonte — sem transformação de conteúdo
210
+ - ✅ Apenas campos de auditoria adicionados: `ingested_at`, `source_system`, `data_referencia`
211
+ - ✅ Idempotência: DELETE por partição antes do INSERT
212
+ - ❌ Nunca aplicar regras de negócio em bronze — isso é silver
213
+
214
+ ### Fase 5 — Criar Expectation Suite Mínima
215
+
216
+ Criar a suite de qualidade antes de usar os dados em downstream:
217
+
218
+ ```python
219
+ import great_expectations as ge
220
+
221
+ def create_bronze_suite(datasource_name: str, table_name: str) -> None:
222
+ """Cria Expectation Suite mínima para tabela bronze."""
223
+ context = ge.get_context()
224
+ suite = context.add_expectation_suite(f"bronze.{table_name}.min")
225
+ validator = context.get_validator(
226
+ datasource_name=datasource_name,
227
+ data_asset_name=table_name
228
+ )
229
+
230
+ # Checks obrigatórios (data-rules.md seção 2)
231
+ validator.expect_table_row_count_to_be_between(min_value=1)
232
+ validator.expect_column_values_to_not_be_null(column="<chave_primaria>")
233
+ validator.expect_column_values_to_not_be_null(column="data_referencia")
234
+ validator.expect_column_values_to_be_unique(column="<chave_primaria>")
235
+
236
+ # Campos sensíveis: verificar que não estão expostos sem mascaramento
237
+ # (adicionar se houver campos sensíveis identificados na Fase 1)
238
+
239
+ validator.save_expectation_suite()
240
+ print(f"Suite criada: bronze.{table_name}.min")
241
+ ```
242
+
243
+ > Se o projeto usa `$DATA_QUALITY_TOOL` diferente de Great Expectations, adaptar a sintaxe mantendo os mesmos checks.
244
+
245
+ ### Fase 6 — Testar e Validar
246
+
247
+ Antes de considerar o onboarding completo:
248
+
249
+ **Checklist de validação**:
250
+
251
+ ```
252
+ [ ] Script de extração executa sem erro para 1 data de teste
253
+ [ ] Bronze recebe os dados com campos de auditoria corretos
254
+ [ ] Expectation Suite passa para o período de teste
255
+ [ ] Volume extraído é compatível com o esperado (fase 1)
256
+ [ ] Campos sensíveis estão mascarados ou ausentes em bronze
257
+ [ ] Script é idempotente (reprocessar 2x não duplica)
258
+ [ ] Log registra: data_referencia, rows_extracted, rows_loaded, status
259
+ [ ] Documentação de pipeline preenchida e salva
260
+ ```
261
+
262
+ ### Fase 7 — Próximos passos (silver/gold)
263
+
264
+ Após bronze validado, orientar os próximos passos:
265
+
266
+ ```
267
+ Bronze concluído ✅
268
+
269
+ Próximos passos recomendados:
270
+ 1. Criar script silver_<fonte>: limpeza, tipagem e deduplicação
271
+ 2. Expandir Expectation Suite para silver (checks de tipo e domínio)
272
+ 3. Avaliar se há caso de uso para gold (analytics, BI, contrato de dados)
273
+ 4. Se expor para outra squad → criar contrato via data.contract.md
274
+ ```
275
+
276
+ ---
277
+
278
+ ## Tratamento de Campos Sensíveis
279
+
280
+ Se a Fase 1 identificou campos sensíveis (CPF, dados bancários, localização, etc.):
281
+
282
+ | Campo sensível | Tratamento em bronze | Tratamento em silver/gold |
283
+ |---|---|---|
284
+ | CPF / RG / CNH | Manter no bronze com acesso IAM restrito | Mascarar: `SHA256(cpf)` ou remover |
285
+ | Dados bancários | Manter no bronze com acesso IAM restrito | Remover ou mascarar |
286
+ | Localização em tempo real | Manter no bronze com acesso IAM restrito | Agregar (ex: cidade, estado) |
287
+ | Telefone / Endereço | Manter no bronze com acesso IAM restrito | Remover se não necessário |
288
+
289
+ > Qualquer exposição de dado sensível em gold exige contrato de dados aprovado (ver `data-rules.md` seção 5).
290
+
291
+ ---
292
+
293
+ ## Regras Críticas
294
+
295
+ ### Nunca faça
296
+
297
+ - ❌ Iniciar implementação sem documentar o pipeline primeiro
298
+ - ❌ Aplicar transformações em bronze — bronze é imutável e bruto
299
+ - ❌ Ignorar campos sensíveis identificados na análise
300
+ - ❌ Usar APPEND sem verificar duplicatas (quebra idempotência)
301
+ - ❌ Promover para silver sem Expectation Suite passando
302
+
303
+ ### Sempre faça
304
+
305
+ - ✅ Amostrar antes de ingerir tudo — entender o schema real
306
+ - ✅ Documentar o pipeline antes de implementar
307
+ - ✅ Identificar campos sensíveis na fase de análise
308
+ - ✅ Garantir idempotência desde o primeiro script
309
+ - ✅ Criar Expectation Suite mínima antes de considerar bronze pronto
310
+ - ✅ Testar com período pequeno antes de reprocessar histórico