jarvis-ai-framework 2.1.1 → 3.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 (259) hide show
  1. package/AGENTS.md +14 -115
  2. package/agents/AGENTS.md +11 -23
  3. package/agents/README.md +25 -129
  4. package/agents/engineering/data/eng.data-engineer.agent.md +11 -34
  5. package/agents/engineering/eng.agent.md +14 -24
  6. package/agents/engineering/eng.bug-hunter.md +7 -15
  7. package/agents/engineering/eng.dev-code-reviewer.md +1 -1
  8. package/agents/engineering/eng.frontend.agent.md +3 -7
  9. package/agents/engineering/eng.rpa.agent.md +2 -8
  10. package/agents/engineering/qa/eng.qa.quality-strategist.md +6 -11
  11. package/agents/engineering/qa/eng.qa.test-architect.md +8 -18
  12. package/agents/engineering/qa/eng.qa.test-planner.md +10 -14
  13. package/agents/engineering/qa/eng.qa.testing-engineer.md +91 -24
  14. package/agents/product/prod.discovery-interviewer.md +3 -3
  15. package/bin/README.md +142 -0
  16. package/bin/commands/docs-publish.js +105 -141
  17. package/bin/commands/docs-sync.js +66 -104
  18. package/bin/commands/info.js +7 -27
  19. package/bin/commands/init.js +23 -51
  20. package/bin/commands/install-rtk.js +9 -3
  21. package/bin/commands/list.js +5 -18
  22. package/bin/commands/map.js +20 -5
  23. package/bin/commands/qa-signoff.js +58 -55
  24. package/bin/commands/tokens.js +14 -17
  25. package/bin/commands/whoami.js +30 -26
  26. package/bin/jarvis.js +9 -163
  27. package/bin/lib/auth/session.js +20 -20
  28. package/bin/lib/cli/program.js +219 -0
  29. package/bin/lib/cli/shared-options.js +29 -0
  30. package/bin/lib/config/constants.js +59 -2
  31. package/bin/lib/config/ide-config.js +4 -8
  32. package/bin/lib/core/profile-filter.js +4 -1
  33. package/bin/lib/core/scanner.js +3 -29
  34. package/bin/lib/core/sync-engine.js +21 -14
  35. package/bin/lib/core/token-report.js +12 -2
  36. package/bin/lib/docs/fetch-file.js +39 -0
  37. package/bin/lib/docs/publish-file.js +194 -0
  38. package/bin/lib/docs/redis-cache.js +49 -0
  39. package/bin/lib/docs/validate-frontmatter.js +9 -39
  40. package/bin/lib/env-loader.js +11 -34
  41. package/bin/lib/flow-map/parse.js +11 -5
  42. package/bin/lib/flow-map/render.js +5 -2
  43. package/bin/lib/flow-map/tree.js +59 -10
  44. package/bin/lib/tasks/comment.js +40 -35
  45. package/bin/lib/utils/frontmatter.js +57 -0
  46. package/bin/lib/utils/git-parser.js +4 -6
  47. package/bin/lib/utils/npmrc-parser.js +6 -13
  48. package/bin/lib/utils/paths.js +2 -4
  49. package/bin/lib/utils/ui.js +3 -9
  50. package/bin/lib/vcs/api.js +25 -41
  51. package/bin/lib/vcs/create-issue.js +49 -33
  52. package/bin/lib/vcs/create-merge.js +47 -31
  53. package/bin/lib/vcs/fetch-raw.js +35 -23
  54. package/package.json +14 -5
  55. package/rules/engineering/eng-rules.md +1 -1
  56. package/rules/engineering/eng-security-rules.md +18 -16
  57. package/rules/engineering/eng.bump-rules.md +3 -2
  58. package/rules/engineering/eng.docs-scraping-rules.md +4 -4
  59. package/rules/engineering/eng.integrations-rules.md +3 -3
  60. package/rules/engineering/eng.skills-rules.md +1 -1
  61. package/rules/engineering/eng.specializations-rules.md +18 -4
  62. package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
  63. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
  64. package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
  65. package/skills/AGENTS.md +52 -87
  66. package/skills/SKILLS-ROADMAP.md +47 -128
  67. package/skills/eng-ai/SKILL.md +270 -0
  68. package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
  69. package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
  70. package/skills/eng-ai/references/11-governanca-ia.md +24 -0
  71. package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
  72. package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
  73. package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
  74. package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
  75. package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
  76. package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
  77. package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
  78. package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
  79. package/skills/eng-ai/references/9-produto-ia.md +24 -0
  80. package/skills/eng-ai/references/especializacoes.md +17 -0
  81. package/skills/eng-automation/SKILL.md +290 -0
  82. package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
  83. package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
  84. package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
  85. package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
  86. package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
  87. package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
  88. package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
  89. package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
  90. package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
  91. package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
  92. package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
  93. package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
  94. package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
  95. package/skills/eng-automation/references/7-rpa.md +25 -0
  96. package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
  97. package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
  98. package/skills/eng-automation/references/especializacoes.md +18 -0
  99. package/skills/eng-backend-nestjs/SKILL.md +1 -1
  100. package/skills/eng-data/SKILL.md +271 -0
  101. package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
  102. package/skills/eng-data/references/10-ciencia-dados.md +24 -0
  103. package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
  104. package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
  105. package/skills/eng-data/references/2-modelagem-dados.md +24 -0
  106. package/skills/eng-data/references/3-bancos-dados.md +24 -0
  107. package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
  108. package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
  109. package/skills/eng-data/references/6-qualidade-dados.md +24 -0
  110. package/skills/eng-data/references/7-governanca-metadados.md +24 -0
  111. package/skills/eng-data/references/8-estatistica-analise.md +24 -0
  112. package/skills/eng-data/references/9-analytics-bi.md +24 -0
  113. package/skills/eng-data/references/especializacoes.md +20 -0
  114. package/skills/eng-frontend/SKILL.md +12 -5
  115. package/skills/eng-frontend/references/13-design-system.md +48 -0
  116. package/skills/eng-frontend/references/14-microfrontend.md +46 -0
  117. package/skills/eng-global-task-comment/SKILL.md +2 -2
  118. package/skills/eng-platform/SKILL.md +331 -0
  119. package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
  120. package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
  121. package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
  122. package/skills/eng-platform/references/12-finops-custos.md +24 -0
  123. package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
  124. package/skills/eng-platform/references/14-profiling-performance.md +23 -0
  125. package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
  126. package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
  127. package/skills/eng-platform/references/2-redes.md +23 -0
  128. package/skills/eng-platform/references/3-cloud.md +24 -0
  129. package/skills/eng-platform/references/4-iac-automacao.md +24 -0
  130. package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
  131. package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
  132. package/skills/eng-platform/references/7-observabilidade.md +24 -0
  133. package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
  134. package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
  135. package/skills/eng-platform/references/especializacoes.md +34 -0
  136. package/skills/eng-qa/SKILL.md +283 -0
  137. package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
  138. package/skills/eng-qa/references/10-confiabilidade.md +25 -0
  139. package/skills/eng-qa/references/11-seguranca.md +24 -0
  140. package/skills/eng-qa/references/12-acessibilidade.md +24 -0
  141. package/skills/eng-qa/references/13-dados-testes.md +24 -0
  142. package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
  143. package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
  144. package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
  145. package/skills/eng-qa/references/3-design-testes.md +25 -0
  146. package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
  147. package/skills/eng-qa/references/5-automacao-testes.md +25 -0
  148. package/skills/eng-qa/references/6-api-integracao.md +25 -0
  149. package/skills/eng-qa/references/7-contrato.md +24 -0
  150. package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
  151. package/skills/eng-qa/references/9-performance.md +24 -0
  152. package/skills/eng-qa/references/especializacoes.md +29 -0
  153. package/skills/eng-qa-planner/SKILL.md +264 -0
  154. package/skills/jarvis-context-detect/SKILL.md +1 -1
  155. package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
  156. package/skills/jarvis-create-specialization/SKILL.md +8 -0
  157. package/skills/jarvis-docs-central/README.md +31 -28
  158. package/skills/jarvis-docs-central/SKILL.md +5 -5
  159. package/skills/jarvis-init/SKILL.md +8 -8
  160. package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
  161. package/skills/jarvis-list-specializations/SKILL.md +30 -17
  162. package/skills/jarvis-report-issue/SKILL.md +1 -1
  163. package/taxonomy.md +4 -16
  164. package/templates/ENV-template.md +10 -2
  165. package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
  166. package/workflows/AGENTS.md +3 -1
  167. package/workflows/README.md +0 -10
  168. package/workflows/engineering/data/data.new-pipeline.md +6 -5
  169. package/workflows/engineering/eng.bug-audit.md +4 -14
  170. package/workflows/engineering/eng.debug.md +4 -20
  171. package/workflows/engineering/eng.pr.md +10 -28
  172. package/workflows/engineering/eng.pre-pr.md +11 -19
  173. package/workflows/engineering/eng.review.md +7 -13
  174. package/workflows/engineering/eng.rpa.robot.md +3 -9
  175. package/workflows/engineering/eng.start.md +16 -11
  176. package/workflows/engineering/eng.work.md +10 -18
  177. package/workflows/engineering/qa/eng.qa-sprint-planning.md +1 -1
  178. package/workflows/product/prod.spec.discovery.md +2 -2
  179. package/workflows/warm-up.md +35 -63
  180. package/agents/engineering/eng.cybersecurity.agent.md +0 -486
  181. package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -112
  182. package/bin/lib/docs/fetch-file.sh +0 -41
  183. package/bin/lib/docs/publish-file.sh +0 -284
  184. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
  185. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
  186. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
  187. package/skills/eng-ai-engineer/SKILL.md +0 -303
  188. package/skills/eng-data-bi/SKILL.md +0 -206
  189. package/skills/eng-data-debug/SKILL.md +0 -314
  190. package/skills/eng-data-engineer/SKILL.md +0 -266
  191. package/skills/eng-data-onboard/SKILL.md +0 -317
  192. package/skills/eng-data-orchestrator/SKILL.md +0 -433
  193. package/skills/eng-devops-performance-engineer/SKILL.md +0 -319
  194. package/skills/eng-frontend-design-system/SKILL.md +0 -155
  195. package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +0 -57
  196. package/skills/eng-frontend-design-system/references/2-tokens.md +0 -116
  197. package/skills/eng-frontend-design-system/references/3-componentes.md +0 -165
  198. package/skills/eng-frontend-design-system/references/4-storybook.md +0 -85
  199. package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +0 -76
  200. package/skills/eng-frontend-microfrontend/SKILL.md +0 -164
  201. package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +0 -109
  202. package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +0 -70
  203. package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +0 -73
  204. package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +0 -48
  205. package/skills/eng-frontend-microfrontend/references/5-event-bus.md +0 -59
  206. package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +0 -77
  207. package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +0 -45
  208. package/skills/eng-global-browser-extension-builder/SKILL.md +0 -392
  209. package/skills/eng-global-jira-comment/SKILL.md +0 -27
  210. package/skills/eng-qa-a11y-audit/SKILL.md +0 -276
  211. package/skills/eng-qa-bug-report/SKILL.md +0 -877
  212. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
  213. package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +0 -148
  214. package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +0 -46
  215. package/skills/eng-qa-bug-report/references/3-bug-to-test.md +0 -45
  216. package/skills/eng-qa-cypress-e2e/SKILL.md +0 -184
  217. package/skills/eng-qa-dev-guide/SKILL.md +0 -173
  218. package/skills/eng-qa-e2e/SKILL.md +0 -407
  219. package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -329
  220. package/skills/eng-qa-exploratory/SKILL.md +0 -196
  221. package/skills/eng-qa-gate/SKILL.md +0 -377
  222. package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
  223. package/skills/eng-qa-graphql-contract/SKILL.md +0 -263
  224. package/skills/eng-qa-quality-report/SKILL.md +0 -419
  225. package/skills/eng-qa-test-plan/SKILL.md +0 -473
  226. package/skills/eng-qa-testsprite/SKILL.md +0 -332
  227. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
  228. package/skills/eng-qa-unit-test/SKILL.md +0 -478
  229. package/skills/eng-scraper/SKILL.md +0 -260
  230. package/skills/eng-scraper/references/1-puppeteer.md +0 -140
  231. package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +0 -82
  232. package/skills/eng-scraper/references/3-anti-bot.md +0 -94
  233. package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +0 -137
  234. package/skills/eng-scraper-robot-builder/SKILL.md +0 -377
  235. package/skills/eng-security-cybersecurity/SKILL.md +0 -250
  236. package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +0 -331
  237. package/skills/eng-security-cybersecurity/references/2-secrets-management.md +0 -31
  238. package/skills/eng-security-cybersecurity/references/3-input-validation.md +0 -43
  239. package/skills/eng-security-cybersecurity/references/4-compliance.md +0 -20
  240. package/skills/eng-security-patch/SKILL.md +0 -388
  241. package/skills/eng-security-threat-model/SKILL.md +0 -171
  242. package/skills/eng-security-triage/SKILL.md +0 -276
  243. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
  244. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
  245. package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
  246. package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
  247. package/templates/engineering/qa/qa.quality-report-template.md +0 -130
  248. package/workflows/engineering/eng.security-audit.md +0 -319
  249. package/workflows/engineering/eng.security-incident.md +0 -281
  250. package/workflows/engineering/eng.security-pipeline.md +0 -219
  251. package/workflows/engineering/eng.security-review.md +0 -241
  252. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -57
  253. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -57
  254. package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -68
  255. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -209
  256. package/workflows/engineering/qa/eng.qa-quality-report.md +0 -85
  257. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
  258. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
  259. /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
@@ -1,266 +0,0 @@
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
- area: data
14
- argument-hint: "[pipeline|modelo|contrato|qualidade|onboard|debug|dashboard|dag] [contexto]"
15
- disable-model-invocation: false
16
- ---
17
-
18
- # Eng Data Engineer - Especialista em Engenharia e Análise de Dados
19
-
20
- 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.
21
-
22
- ## Objetivo
23
-
24
- Construir pipelines confiáveis, modelos de dados bem documentados e dashboards que habilitam decisões data-driven em toda a organização.
25
-
26
- ## Stack do Projeto
27
-
28
- Leia as variáveis de stack do `$IDE/ENV.md`:
29
-
30
- ```bash
31
- grep -E "^DATA_" $IDE/ENV.md
32
- ```
33
-
34
- | Variável ENV | O que define |
35
- |-------------|-------------|
36
- | `DATA_ORCHESTRATOR` | Orquestrador de pipelines (ex: airflow, prefect, dagster) |
37
- | `DATA_ETL_TOOL` | Ferramenta de transformação (ex: aws_glue, dbt, spark) |
38
- | `DATA_QUALITY_TOOL` | Ferramenta de qualidade (ex: great_expectations, soda) |
39
- | `DATA_LAKE` | Armazenamento analítico (ex: aws_s3, gcs) |
40
- | `DATA_QUERY_ENGINE` | Engine de query (ex: aws_athena, bigquery, redshift) |
41
- | `DATA_BI_TOOL` | Ferramenta de BI (ex: metabase, looker, superset) |
42
- | `DATA_WAREHOUSE` | Data warehouse dedicado, se houver (ex: redshift, snowflake) — pode estar vazio |
43
- | `DATA_REPO` | Repositório dos scripts de pipeline (ex: data-pipelines) |
44
-
45
- > Se as variáveis `DATA_*` não estiverem definidas no ENV.md, pergunte ao usuário qual a stack antes de prosseguir.
46
- > Se `DATA_WAREHOUSE` estiver vazio, assumir que não há warehouse dedicado e usar `$DATA_QUERY_ENGINE` como destino analítico.
47
-
48
- ## Entrada
49
-
50
- - `$ARGUMENTS` - Operação ou problema a resolver (ex: `pipeline-pedidos`, `modelo-clientes`, `dashboard-kpi-vendas`, `contrato-dados-financeiro`, `qualidade-tabela-pagamentos`)
51
-
52
- ## Recursos
53
-
54
- - **ENV**: `$IDE/ENV.md`
55
- - **Templates**: `templates/engineering/data-pipeline-template.md`, `templates/engineering/data-contract-template.md`
56
- - **Saída**: scripts Python, queries SQL, documentação de pipeline/contrato
57
-
58
- > ⚠️ 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.
59
-
60
- ---
61
-
62
- ## Pré-requisito
63
-
64
- ### 1. Verificar ENV.md
65
-
66
- ```bash
67
- grep -E "^(SQUAD|HUB|DATA_)" $IDE/ENV.md
68
- ```
69
-
70
- Se `HUB` não for `DATA`, avisar que o skill é voltado para o time de Data mas prosseguir normalmente.
71
-
72
- Se variáveis `DATA_*` não estiverem definidas, coletar as informações abaixo **uma pergunta por vez** antes de continuar:
73
-
74
- | Variável | Pergunta |
75
- |----------|----------|
76
- | `DATA_ORCHESTRATOR` | Qual orquestrador de pipelines o projeto usa? (ex: airflow, prefect, dagster, glue-scheduler) |
77
- | `DATA_ETL_TOOL` | Qual ferramenta de transformação/ETL? (ex: aws_glue, dbt, spark, pandas) |
78
- | `DATA_QUALITY_TOOL` | Qual ferramenta de qualidade de dados? (ex: great_expectations, soda, deequ) |
79
- | `DATA_LAKE` | Qual armazenamento do data lake? (ex: aws_s3, gcs, azure_adls) |
80
- | `DATA_QUERY_ENGINE` | Qual engine de query analítica? (ex: aws_athena, bigquery, redshift, trino) |
81
- | `DATA_BI_TOOL` | Qual ferramenta de BI/dashboards? (ex: metabase, looker, superset, power_bi) |
82
- | `DATA_WAREHOUSE` | Há um data warehouse dedicado? Se sim, qual? (ex: redshift, snowflake, bigquery — deixar vazio se não houver) |
83
- | `DATA_REPO` | Qual o nome do repositório de scripts de pipeline? (ex: data-pipelines) |
84
-
85
- > Usar essas respostas apenas na sessão atual. Sugerir ao usuário adicionar as variáveis no `ENV.md` para sessões futuras.
86
-
87
- ### 2. Carregar regras do projeto
88
-
89
- 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.
90
-
91
- ---
92
-
93
- ## Princípios de Dados
94
-
95
- ### 1. Documentação é obrigatória
96
-
97
- Todo pipeline e modelo de dados **deve ter documentação** antes de ir para produção:
98
- - Para pipelines: usar `templates/engineering/data-pipeline-template.md`
99
- - Para contratos de dados: usar `templates/engineering/data-contract-template.md`
100
-
101
- ### 2. Qualidade de dados não é opcional
102
-
103
- Toda ingestão deve ter validações mínimas:
104
- - Schema esperado definido
105
- - Checks de nulidade em campos críticos
106
- - Checks de volume (alertar se 0 rows ou queda > 50%)
107
- - Data de referência sempre explícita (não assumir "hoje")
108
-
109
- ### 3. Idempotência
110
-
111
- Pipelines devem ser idempotentes — reprocessar o mesmo período não deve duplicar dados.
112
-
113
- ### 4. Nomenclatura padronizada (Medallion)
114
-
115
- | Camada | Nome | Exemplo |
116
- |--------|------|---------|
117
- | Ingestão bruta | `bronze` | `bronze.pedidos_erp` |
118
- | Limpeza e tipagem | `silver` | `silver.pedidos` |
119
- | Analítico / BI | `gold` | `gold.fato_pedidos`, `gold.dim_cliente` |
120
-
121
- ### 5. Contratos de dados
122
-
123
- Antes de expor dados para outra squad, criar um contrato de dados documentando: schema, SLA de atualização, dono, e campos sensíveis.
124
-
125
- ---
126
-
127
- ## Roteamento para Skills Especializadas
128
-
129
- Dependendo do argumento recebido em `$ARGUMENTS`, este skill roteia para o playbook especializado:
130
-
131
- > Se o argumento se encaixar em um dos casos acima, invocar a skill correspondente e seguir seu fluxo.
132
- > Se não se encaixar, continuar neste skill com os fluxos abaixo.
133
-
134
- ### Skills invocados durante a execução do skill
135
-
136
- | Passo | Skill | Condição |
137
- |-------|-------|----------|
138
- | Argumento: `onboard`, `nova-fonte`, `primeira-ingestão` | `/eng-data-onboard` | Se o argumento for um destes (roteamento mutuamente exclusivo: no máximo uma das 4 skills é invocada) |
139
- | Argumento: `debug`, `falha`, `diagnóstico`, `pipeline-quebrado` | `/eng-data-debug` | Se o argumento for um destes (mutuamente exclusivo) |
140
- | Argumento: `dashboard`, `bi`, `query-analitica`; Fluxos de Trabalho › Dashboard | `/eng-data-bi` | Se o argumento for um destes (mutuamente exclusivo) ou ao executar o fluxo de Dashboard |
141
- | Argumento: `dag`, `orquestração`, `schedule` | `/eng-data-orchestrator` | Se o argumento for um destes (mutuamente exclusivo) |
142
-
143
- Quando usar cada uma:
144
-
145
- - `/eng-data-onboard`: integrar uma fonte de dados pela primeira vez
146
- - `/eng-data-debug`: investigar falha, queda de volume ou dado incorreto
147
- - `/eng-data-bi`: criar dashboard, otimizar query ou compartilhar dados
148
- - `/eng-data-orchestrator`: criar ou manter DAGs, retry, alertas, troubleshooting
149
-
150
- ---
151
-
152
- ## Fluxos de Trabalho
153
-
154
- ### Pipeline ETL/ELT
155
-
156
- 1. **Entender a fonte**: schema, volume, frequência de atualização, owner
157
- 2. **Definir destino**: tabela no `$DATA_QUERY_ENGINE`, camada (bronze/silver/gold)
158
- 3. **Implementar extração**: conexão, autenticação, paginação se necessário
159
- 4. **Implementar transformação**: limpeza, tipagem, regras de negócio
160
- 5. **Implementar carga**: idempotente, com log de execução
161
- 6. **Criar script em `$DATA_REPO/jobs/<camada>/<nome>.py`** seguindo o padrão de script Python abaixo
162
- 7. **Documentar**: preencher `templates/engineering/data-pipeline-template.md`
163
- 8. **Validar qualidade**: checks de schema, volume, nulidade via `$DATA_QUALITY_TOOL`
164
-
165
- ### Modelagem Dimensional
166
-
167
- 1. **Identificar granularidade**: qual é o grão do fato?
168
- 2. **Mapear dimensões**: cliente, produto, tempo, canal
169
- 3. **Definir métricas**: o que será medido?
170
- 4. **Criar tabela fato + dimensões**
171
- 5. **Documentar no contrato de dados**
172
-
173
- ### Dashboard ($DATA_BI_TOOL)
174
-
175
- > Para dashboards, invocar a skill especializada: `eng-data-bi`
176
- > Arquivo: `$IDE/skills/eng-data-bi/SKILL.md`
177
- > Uso: `/eng-data-bi [dashboard|query|compartilhar|otimizar] [contexto]`
178
-
179
- A skill `eng-data-bi` cobre: criação de dashboard, otimização de query lenta e compartilhamento de dados com squads.
180
-
181
- ---
182
-
183
- ## Qualidade de Dados — Checklist mínimo
184
-
185
- ```python
186
- def validate_pipeline_output(df, table_name: str, expected_min_rows: int = 1):
187
- """Validações mínimas obrigatórias para qualquer pipeline."""
188
- assert len(df) >= expected_min_rows, f"{table_name}: 0 rows — pipeline vazio"
189
- assert df.isnull().sum().sum() == 0 or check_nullability_rules(df), \
190
- f"{table_name}: nulos em campos críticos"
191
- assert 'data_referencia' in df.columns or 'created_at' in df.columns, \
192
- f"{table_name}: sem coluna de data de referência"
193
- ```
194
-
195
- ---
196
-
197
- ## Padrão de Script Python
198
-
199
- ```python
200
- """
201
- Pipeline: <nome>
202
- Descrição: <o que faz>
203
- Fonte: <origem dos dados>
204
- Destino: <tabela destino>
205
- Frequência: <diário/semanal/etc>
206
- Owner: <email do responsável>
207
- """
208
-
209
- import logging
210
- from datetime import date
211
-
212
- logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
213
- logger = logging.getLogger(__name__)
214
-
215
-
216
- def extract(data_referencia: date) -> list[dict]:
217
- """Extrai dados da fonte para a data de referência."""
218
- logger.info(f"Extraindo dados para {data_referencia}")
219
- # implementar
220
- ...
221
-
222
-
223
- def transform(raw_data: list[dict]) -> list[dict]:
224
- """Aplica regras de limpeza e transformação."""
225
- # implementar
226
- ...
227
-
228
-
229
- def load(transformed_data: list[dict], data_referencia: date) -> None:
230
- """Carrega dados no destino de forma idempotente."""
231
- logger.info(f"Carregando {len(transformed_data)} registros para {data_referencia}")
232
- # DELETE WHERE data_referencia = ? antes de INSERT (idempotência)
233
- ...
234
-
235
-
236
- def run(data_referencia: date = date.today()) -> None:
237
- raw = extract(data_referencia)
238
- transformed = transform(raw)
239
- load(transformed, data_referencia)
240
- logger.info(f"Pipeline concluído: {len(transformed)} registros processados")
241
-
242
-
243
- if __name__ == "__main__":
244
- run()
245
- ```
246
-
247
- ---
248
-
249
- ## Regras Críticas
250
-
251
- ### Nunca faça
252
-
253
- - ❌ Hardcode de credenciais em scripts — sempre variáveis de ambiente
254
- - ❌ `SELECT *` em produção — sempre listar campos explicitamente
255
- - ❌ Pipeline sem log de execução (início, fim, volume processado)
256
- - ❌ Modificar tabela bronze — bronze é imutável, transformações vão em silver/gold
257
- - ❌ Expor dados sensíveis (CPF, dados pessoais) sem mascaramento
258
- - ❌ Assumir que dados sempre chegam — sempre validar volume e schema
259
-
260
- ### Sempre faça
261
-
262
- - ✅ Logs estruturados com data_referencia, volume e status
263
- - ✅ Idempotência: reprocessar não duplica
264
- - ✅ Documentar antes de entregar para outra squad
265
- - ✅ Validar com a squad requisitante o que "correto" significa antes de implementar
266
- - ✅ Versionar queries Athena significativas em arquivos `.sql`
@@ -1,317 +0,0 @@
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
- area: data
14
- argument-hint: "[nome-da-fonte] [tipo: api|db|arquivo|stream]"
15
- disable-model-invocation: false
16
- ---
17
-
18
- # Eng Data Onboard — Integração de Fonte Nova
19
-
20
- 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.
21
-
22
- ## Objetivo
23
-
24
- 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.
25
-
26
- ## Stack do Projeto
27
-
28
- ```bash
29
- grep -E "^DATA_" $IDE/ENV.md
30
- ```
31
-
32
- | Variável ENV | O que define |
33
- |-------------|-------------|
34
- | `DATA_ETL_TOOL` | Ferramenta ETL (ex: aws_glue, dbt, spark, pandas) |
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
- | `DATA_ORCHESTRATOR` | Orquestrador (ex: airflow, prefect, glue-scheduler) |
40
-
41
- ---
42
-
43
- ## Fases de Onboarding
44
-
45
- ### Fase 1 — Entender a Fonte
46
-
47
- Antes de escrever qualquer código, coletar as informações abaixo **uma por vez** se não fornecidas:
48
-
49
- | Informação | Pergunta |
50
- |---|---|
51
- | Nome da fonte | Como será chamada? (ex: `erp_pedidos`, `crm_clientes`) |
52
- | Tipo | API REST, banco relacional, arquivo (CSV/Parquet), stream? |
53
- | Frequência | Ingestão diária, horária, sob demanda? |
54
- | Volume estimado | Quantos registros por execução? |
55
- | Owner na fonte | Quem é o responsável pelo dado na origem? |
56
- | Campos disponíveis | Quais colunas existem? Qual é a chave primária? |
57
- | Campos sensíveis | Há CPF, dados bancários, localização, dados pessoais? |
58
- | SLA esperado | Até quando o dado precisa estar disponível em gold? |
59
-
60
- ### Fase 2 — Schema Discovery (amostragem)
61
-
62
- Antes de ingerir tudo, amostrar a fonte para entender o schema real:
63
-
64
- #### Para API REST
65
-
66
- ```python
67
- import requests
68
- import json
69
-
70
- def sample_api(endpoint: str, params: dict, n_samples: int = 100) -> list[dict]:
71
- """Amostra N registros da API para análise de schema."""
72
- response = requests.get(
73
- endpoint,
74
- params={**params, 'limit': n_samples},
75
- headers={'Authorization': f"Bearer {os.getenv('SOURCE_API_TOKEN')}"}
76
- )
77
- response.raise_for_status()
78
- return response.json()
79
-
80
- # Analisar schema
81
- sample = sample_api(endpoint, params)
82
- print(f"Total campos: {len(sample[0].keys())}")
83
- print(f"Campos: {list(sample[0].keys())}")
84
-
85
- # Verificar nulos por campo
86
- import pandas as pd
87
- df_sample = pd.DataFrame(sample)
88
- print(df_sample.isnull().sum() / len(df_sample) * 100) # % de nulos por campo
89
- ```
90
-
91
- #### Para banco relacional
92
-
93
- ```sql
94
- -- Amostrar e inspecionar schema
95
- SELECT *
96
- FROM <schema>.<tabela>
97
- LIMIT 100;
98
-
99
- -- Verificar cardinalidade dos campos candidatos a chave primária
100
- SELECT
101
- <campo_candidato>,
102
- COUNT(*) AS ocorrencias
103
- FROM <schema>.<tabela>
104
- GROUP BY <campo_candidato>
105
- HAVING COUNT(*) > 1
106
- LIMIT 10; -- se retornar registros → não é chave primária única
107
-
108
- -- Verificar nulos em campos críticos
109
- SELECT
110
- COUNT(*) AS total,
111
- COUNT(<campo_critico>) AS nao_nulos,
112
- COUNT(*) - COUNT(<campo_critico>) AS nulos
113
- FROM <schema>.<tabela>;
114
- ```
115
-
116
- #### Para arquivo (CSV/Parquet)
117
-
118
- ```python
119
- import pandas as pd
120
-
121
- df = pd.read_csv('amostra.csv', nrows=1000) # ou read_parquet
122
- print(df.dtypes) # tipos inferidos
123
- print(df.isnull().sum()) # nulos por coluna
124
- print(df.describe()) # estatísticas básicas
125
- print(df.nunique()) # cardinalidade por coluna
126
- ```
127
-
128
- ### Fase 3 — Documentar o Pipeline (antes de implementar)
129
-
130
- Preencher `templates/engineering/data-pipeline-template.md` com o que foi descoberto na Fase 2.
131
-
132
- **Campos obrigatórios antes de continuar**:
133
- - Nome do pipeline
134
- - Fonte (sistema, endpoint ou tabela)
135
- - Schema mapeado (campos, tipos, chave primária)
136
- - Campos sensíveis identificados e como serão tratados
137
- - Frequência de execução
138
- - Destino bronze (nome da tabela no `$DATA_QUERY_ENGINE`)
139
-
140
- > ⚠️ **Não iniciar a implementação sem o doc de pipeline preenchido.**
141
- > O doc é a fonte de verdade — se mudar algo durante a implementação, atualizar o doc.
142
-
143
- ### Fase 4 — Implementar Extração para Bronze
144
-
145
- Criar o script de extração seguindo o padrão do projeto:
146
-
147
- ```python
148
- """
149
- Pipeline: bronze_<nome_fonte>
150
- Descrição: Ingestão bruta de <fonte> para bronze
151
- Fonte: <sistema_origem> — <endpoint_ou_tabela>
152
- Destino: bronze.<nome_fonte>
153
- Frequência: <diária/horária/sob demanda>
154
- Owner: <email>
155
- """
156
- import logging
157
- from datetime import date
158
-
159
- logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
160
- logger = logging.getLogger(__name__)
161
-
162
-
163
- def extract(data_referencia: date) -> list[dict]:
164
- """Extrai dados brutos da fonte para a data de referência."""
165
- logger.info(f"Extraindo {data_referencia} de <fonte>")
166
- # implementar: API call, DB query, leitura de arquivo
167
- ...
168
-
169
-
170
- def load_bronze(raw_data: list[dict], data_referencia: date) -> None:
171
- """
172
- Carrega dados brutos em bronze de forma idempotente.
173
- Bronze = dados exatamente como vieram da fonte, sem transformação.
174
- Adiciona apenas campos de auditoria: ingested_at, source_system, data_referencia.
175
- """
176
- import pandas as pd
177
- from datetime import datetime
178
-
179
- df = pd.DataFrame(raw_data)
180
-
181
- # Campos de auditoria obrigatórios (data-rules.md seção 1)
182
- df['ingested_at'] = datetime.utcnow()
183
- df['source_system'] = '<nome_fonte>'
184
- df['data_referencia'] = data_referencia
185
-
186
- logger.info(f"Carregando {len(df)} registros em bronze.<nome_fonte> para {data_referencia}")
187
-
188
- # Idempotência: DELETE + INSERT por partição
189
- # (implementar com o $DATA_ETL_TOOL do projeto)
190
- delete_partition('bronze.<nome_fonte>', 'data_referencia', str(data_referencia))
191
- insert(df, 'bronze.<nome_fonte>')
192
-
193
- logger.info(f"Bronze carregado: {len(df)} registros")
194
-
195
-
196
- def run(data_referencia: date = date.today()) -> None:
197
- raw = extract(data_referencia)
198
- if not raw:
199
- logger.warning(f"Nenhum dado extraído para {data_referencia} — verificar fonte")
200
- return
201
- load_bronze(raw, data_referencia)
202
- logger.info(f"Pipeline bronze_<nome_fonte> concluído: {len(raw)} registros")
203
-
204
-
205
- if __name__ == "__main__":
206
- run()
207
- ```
208
-
209
- **Regras de bronze**:
210
- - ✅ Dados exatamente como vieram da fonte — sem transformação de conteúdo
211
- - ✅ Apenas campos de auditoria adicionados: `ingested_at`, `source_system`, `data_referencia`
212
- - ✅ Idempotência: DELETE por partição antes do INSERT
213
- - ❌ Nunca aplicar regras de negócio em bronze — isso é silver
214
-
215
- ### Fase 5 — Criar Expectation Suite Mínima
216
-
217
- Criar a suite de qualidade antes de usar os dados em downstream:
218
-
219
- ```python
220
- import great_expectations as ge
221
-
222
- def create_bronze_suite(datasource_name: str, table_name: str) -> None:
223
- """Cria Expectation Suite mínima para tabela bronze."""
224
- context = ge.get_context()
225
- suite = context.add_expectation_suite(f"bronze.{table_name}.min")
226
- validator = context.get_validator(
227
- datasource_name=datasource_name,
228
- data_asset_name=table_name
229
- )
230
-
231
- # Checks obrigatórios (data-rules.md seção 2)
232
- validator.expect_table_row_count_to_be_between(min_value=1)
233
- validator.expect_column_values_to_not_be_null(column="<chave_primaria>")
234
- validator.expect_column_values_to_not_be_null(column="data_referencia")
235
- validator.expect_column_values_to_be_unique(column="<chave_primaria>")
236
-
237
- # Campos sensíveis: verificar que não estão expostos sem mascaramento
238
- # (adicionar se houver campos sensíveis identificados na Fase 1)
239
-
240
- validator.save_expectation_suite()
241
- print(f"Suite criada: bronze.{table_name}.min")
242
- ```
243
-
244
- > Se o projeto usa `$DATA_QUALITY_TOOL` diferente de Great Expectations, adaptar a sintaxe mantendo os mesmos checks.
245
-
246
- ### Fase 6 — Testar e Validar
247
-
248
- Antes de considerar o onboarding completo:
249
-
250
- **Checklist de validação**:
251
-
252
- ```
253
- [ ] Script de extração executa sem erro para 1 data de teste
254
- [ ] Bronze recebe os dados com campos de auditoria corretos
255
- [ ] Expectation Suite passa para o período de teste
256
- [ ] Volume extraído é compatível com o esperado (fase 1)
257
- [ ] Campos sensíveis estão mascarados ou ausentes em bronze
258
- [ ] Script é idempotente (reprocessar 2x não duplica)
259
- [ ] Log registra: data_referencia, rows_extracted, rows_loaded, status
260
- [ ] Documentação de pipeline preenchida e salva
261
- ```
262
-
263
- ### Fase 7 — Próximos passos (silver/gold)
264
-
265
- Após bronze validado, orientar os próximos passos:
266
-
267
- ```
268
- Bronze concluído ✅
269
-
270
- Próximos passos recomendados:
271
- 1. Criar script silver_<fonte>: limpeza, tipagem e deduplicação
272
- 2. Expandir Expectation Suite para silver (checks de tipo e domínio)
273
- 3. Avaliar se há caso de uso para gold (analytics, BI, contrato de dados)
274
- 4. Se expor para outra squad → criar contrato via data.contract.md
275
- ```
276
-
277
- ### Skills invocados durante a execução do skill
278
-
279
- | Passo | Skill | Condição |
280
- |-------|-------|----------|
281
- | — | Nenhuma — skill autocontida | — |
282
-
283
- ---
284
-
285
- ## Tratamento de Campos Sensíveis
286
-
287
- Se a Fase 1 identificou campos sensíveis (CPF, dados bancários, localização, etc.):
288
-
289
- | Campo sensível | Tratamento em bronze | Tratamento em silver/gold |
290
- |---|---|---|
291
- | CPF / RG / CNH | Manter no bronze com acesso IAM restrito | Mascarar: `SHA256(cpf)` ou remover |
292
- | Dados bancários | Manter no bronze com acesso IAM restrito | Remover ou mascarar |
293
- | Localização em tempo real | Manter no bronze com acesso IAM restrito | Agregar (ex: cidade, estado) |
294
- | Telefone / Endereço | Manter no bronze com acesso IAM restrito | Remover se não necessário |
295
-
296
- > Qualquer exposição de dado sensível em gold exige contrato de dados aprovado (ver `data-rules.md` seção 5).
297
-
298
- ---
299
-
300
- ## Regras Críticas
301
-
302
- ### Nunca faça
303
-
304
- - ❌ Iniciar implementação sem documentar o pipeline primeiro
305
- - ❌ Aplicar transformações em bronze — bronze é imutável e bruto
306
- - ❌ Ignorar campos sensíveis identificados na análise
307
- - ❌ Usar APPEND sem verificar duplicatas (quebra idempotência)
308
- - ❌ Promover para silver sem Expectation Suite passando
309
-
310
- ### Sempre faça
311
-
312
- - ✅ Amostrar antes de ingerir tudo — entender o schema real
313
- - ✅ Documentar o pipeline antes de implementar
314
- - ✅ Identificar campos sensíveis na fase de análise
315
- - ✅ Garantir idempotência desde o primeiro script
316
- - ✅ Criar Expectation Suite mínima antes de considerar bronze pronto
317
- - ✅ Testar com período pequeno antes de reprocessar histórico