jarvis-ai-framework 2.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/AGENTS.md +14 -115
  2. package/agents/AGENTS.md +11 -23
  3. package/agents/README.md +27 -129
  4. package/agents/engineering/data/eng.data-engineer.agent.md +11 -34
  5. package/agents/engineering/eng.advisor.agent.md +56 -0
  6. package/agents/engineering/eng.agent.md +14 -24
  7. package/agents/engineering/eng.bug-hunter.md +7 -15
  8. package/agents/engineering/eng.dev-code-reviewer.md +1 -1
  9. package/agents/engineering/eng.frontend.agent.md +3 -7
  10. package/agents/engineering/eng.rpa.agent.md +2 -8
  11. package/agents/engineering/qa/eng.qa.quality-strategist.md +6 -11
  12. package/agents/engineering/qa/eng.qa.test-architect.md +8 -18
  13. package/agents/engineering/qa/eng.qa.test-planner.md +10 -14
  14. package/agents/engineering/qa/eng.qa.testing-engineer.md +91 -24
  15. package/agents/product/prod.discovery-interviewer.md +3 -3
  16. package/bin/README.md +142 -0
  17. package/bin/commands/docs-publish.js +105 -141
  18. package/bin/commands/docs-sync.js +66 -104
  19. package/bin/commands/info.js +7 -27
  20. package/bin/commands/init.js +23 -51
  21. package/bin/commands/install-rtk.js +9 -3
  22. package/bin/commands/list.js +5 -18
  23. package/bin/commands/map.js +20 -5
  24. package/bin/commands/qa-signoff.js +58 -55
  25. package/bin/commands/tokens.js +14 -17
  26. package/bin/commands/whoami.js +30 -26
  27. package/bin/jarvis.js +9 -163
  28. package/bin/lib/auth/session.js +20 -20
  29. package/bin/lib/cli/program.js +219 -0
  30. package/bin/lib/cli/shared-options.js +29 -0
  31. package/bin/lib/config/constants.js +59 -2
  32. package/bin/lib/config/ide-config.js +4 -8
  33. package/bin/lib/core/profile-filter.js +4 -1
  34. package/bin/lib/core/scanner.js +3 -29
  35. package/bin/lib/core/sync-engine.js +21 -14
  36. package/bin/lib/core/token-report.js +12 -2
  37. package/bin/lib/docs/fetch-file.js +39 -0
  38. package/bin/lib/docs/publish-file.js +194 -0
  39. package/bin/lib/docs/redis-cache.js +49 -0
  40. package/bin/lib/docs/validate-frontmatter.js +9 -39
  41. package/bin/lib/env-loader.js +11 -34
  42. package/bin/lib/flow-map/parse.js +11 -5
  43. package/bin/lib/flow-map/render.js +5 -2
  44. package/bin/lib/flow-map/tree.js +59 -10
  45. package/bin/lib/tasks/comment.js +40 -35
  46. package/bin/lib/utils/frontmatter.js +57 -0
  47. package/bin/lib/utils/git-parser.js +4 -6
  48. package/bin/lib/utils/npmrc-parser.js +6 -13
  49. package/bin/lib/utils/paths.js +2 -4
  50. package/bin/lib/utils/ui.js +3 -9
  51. package/bin/lib/vcs/api.js +25 -41
  52. package/bin/lib/vcs/create-issue.js +49 -33
  53. package/bin/lib/vcs/create-merge.js +47 -31
  54. package/bin/lib/vcs/fetch-raw.js +35 -23
  55. package/package.json +14 -5
  56. package/rules/engineering/eng-rules.md +1 -1
  57. package/rules/engineering/eng-security-rules.md +18 -16
  58. package/rules/engineering/eng.bump-rules.md +3 -2
  59. package/rules/engineering/eng.docs-scraping-rules.md +4 -4
  60. package/rules/engineering/eng.integrations-rules.md +6 -4
  61. package/rules/engineering/eng.skills-rules.md +1 -1
  62. package/rules/engineering/eng.specializations-rules.md +18 -4
  63. package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
  64. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
  65. package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
  66. package/rules-on-demand/engineering/eng.pre-pr-rules.md +1 -1
  67. package/rules-on-demand/engineering/eng.start-rules.md +2 -0
  68. package/skills/AGENTS.md +52 -87
  69. package/skills/SKILLS-ROADMAP.md +47 -128
  70. package/skills/eng-ai/SKILL.md +270 -0
  71. package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
  72. package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
  73. package/skills/eng-ai/references/11-governanca-ia.md +24 -0
  74. package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
  75. package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
  76. package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
  77. package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
  78. package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
  79. package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
  80. package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
  81. package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
  82. package/skills/eng-ai/references/9-produto-ia.md +24 -0
  83. package/skills/eng-ai/references/especializacoes.md +17 -0
  84. package/skills/eng-automation/SKILL.md +290 -0
  85. package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
  86. package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
  87. package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
  88. package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
  89. package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
  90. package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
  91. package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
  92. package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
  93. package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
  94. package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
  95. package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
  96. package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
  97. package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
  98. package/skills/eng-automation/references/7-rpa.md +25 -0
  99. package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
  100. package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
  101. package/skills/eng-automation/references/especializacoes.md +18 -0
  102. package/skills/eng-backend-nestjs/SKILL.md +1 -1
  103. package/skills/eng-data/SKILL.md +271 -0
  104. package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
  105. package/skills/eng-data/references/10-ciencia-dados.md +24 -0
  106. package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
  107. package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
  108. package/skills/eng-data/references/2-modelagem-dados.md +24 -0
  109. package/skills/eng-data/references/3-bancos-dados.md +24 -0
  110. package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
  111. package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
  112. package/skills/eng-data/references/6-qualidade-dados.md +24 -0
  113. package/skills/eng-data/references/7-governanca-metadados.md +24 -0
  114. package/skills/eng-data/references/8-estatistica-analise.md +24 -0
  115. package/skills/eng-data/references/9-analytics-bi.md +24 -0
  116. package/skills/eng-data/references/especializacoes.md +20 -0
  117. package/skills/eng-frontend/SKILL.md +12 -5
  118. package/skills/eng-frontend/references/13-design-system.md +48 -0
  119. package/skills/eng-frontend/references/14-microfrontend.md +46 -0
  120. package/skills/eng-global-task-comment/SKILL.md +3 -3
  121. package/skills/eng-platform/SKILL.md +331 -0
  122. package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
  123. package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
  124. package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
  125. package/skills/eng-platform/references/12-finops-custos.md +24 -0
  126. package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
  127. package/skills/eng-platform/references/14-profiling-performance.md +23 -0
  128. package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
  129. package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
  130. package/skills/eng-platform/references/2-redes.md +23 -0
  131. package/skills/eng-platform/references/3-cloud.md +24 -0
  132. package/skills/eng-platform/references/4-iac-automacao.md +24 -0
  133. package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
  134. package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
  135. package/skills/eng-platform/references/7-observabilidade.md +24 -0
  136. package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
  137. package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
  138. package/skills/eng-platform/references/especializacoes.md +34 -0
  139. package/skills/eng-qa/SKILL.md +283 -0
  140. package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
  141. package/skills/eng-qa/references/10-confiabilidade.md +25 -0
  142. package/skills/eng-qa/references/11-seguranca.md +24 -0
  143. package/skills/eng-qa/references/12-acessibilidade.md +24 -0
  144. package/skills/eng-qa/references/13-dados-testes.md +24 -0
  145. package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
  146. package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
  147. package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
  148. package/skills/eng-qa/references/3-design-testes.md +25 -0
  149. package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
  150. package/skills/eng-qa/references/5-automacao-testes.md +25 -0
  151. package/skills/eng-qa/references/6-api-integracao.md +25 -0
  152. package/skills/eng-qa/references/7-contrato.md +24 -0
  153. package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
  154. package/skills/eng-qa/references/9-performance.md +24 -0
  155. package/skills/eng-qa/references/especializacoes.md +29 -0
  156. package/skills/eng-qa-planner/SKILL.md +264 -0
  157. package/skills/jarvis-context-detect/SKILL.md +1 -1
  158. package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
  159. package/skills/jarvis-create-specialization/SKILL.md +8 -0
  160. package/skills/jarvis-docs-central/README.md +31 -28
  161. package/skills/jarvis-docs-central/SKILL.md +5 -5
  162. package/skills/jarvis-init/SKILL.md +9 -8
  163. package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
  164. package/skills/jarvis-list-specializations/SKILL.md +30 -17
  165. package/skills/jarvis-report-issue/SKILL.md +1 -1
  166. package/taxonomy.md +4 -16
  167. package/templates/AGENTS.md +2 -0
  168. package/templates/ENV-template.md +20 -2
  169. package/templates/engineering/advisor-template.md +65 -0
  170. package/templates/engineering/architecture-template.md +52 -4
  171. package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
  172. package/workflows/AGENTS.md +3 -1
  173. package/workflows/README.md +0 -10
  174. package/workflows/engineering/data/data.new-pipeline.md +6 -5
  175. package/workflows/engineering/eng.bug-audit.md +4 -14
  176. package/workflows/engineering/eng.debug.md +4 -20
  177. package/workflows/engineering/eng.plan.md +4 -26
  178. package/workflows/engineering/eng.pr.md +13 -63
  179. package/workflows/engineering/eng.pre-pr.md +14 -51
  180. package/workflows/engineering/eng.review.md +7 -13
  181. package/workflows/engineering/eng.rpa.robot.md +3 -9
  182. package/workflows/engineering/eng.start.md +37 -32
  183. package/workflows/engineering/eng.work.md +17 -40
  184. package/workflows/engineering/qa/eng.qa-sprint-planning.md +1 -1
  185. package/workflows/product/prod.spec.discovery.md +2 -2
  186. package/workflows/warm-up.md +35 -63
  187. package/agents/engineering/eng.cybersecurity.agent.md +0 -486
  188. package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -112
  189. package/bin/lib/docs/fetch-file.sh +0 -41
  190. package/bin/lib/docs/publish-file.sh +0 -284
  191. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
  192. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
  193. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
  194. package/skills/eng-ai-engineer/SKILL.md +0 -303
  195. package/skills/eng-data-bi/SKILL.md +0 -206
  196. package/skills/eng-data-debug/SKILL.md +0 -314
  197. package/skills/eng-data-engineer/SKILL.md +0 -266
  198. package/skills/eng-data-onboard/SKILL.md +0 -317
  199. package/skills/eng-data-orchestrator/SKILL.md +0 -433
  200. package/skills/eng-devops-performance-engineer/SKILL.md +0 -319
  201. package/skills/eng-frontend-design-system/SKILL.md +0 -155
  202. package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +0 -57
  203. package/skills/eng-frontend-design-system/references/2-tokens.md +0 -116
  204. package/skills/eng-frontend-design-system/references/3-componentes.md +0 -165
  205. package/skills/eng-frontend-design-system/references/4-storybook.md +0 -85
  206. package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +0 -76
  207. package/skills/eng-frontend-microfrontend/SKILL.md +0 -164
  208. package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +0 -109
  209. package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +0 -70
  210. package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +0 -73
  211. package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +0 -48
  212. package/skills/eng-frontend-microfrontend/references/5-event-bus.md +0 -59
  213. package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +0 -77
  214. package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +0 -45
  215. package/skills/eng-global-browser-extension-builder/SKILL.md +0 -392
  216. package/skills/eng-global-jira-comment/SKILL.md +0 -27
  217. package/skills/eng-qa-a11y-audit/SKILL.md +0 -276
  218. package/skills/eng-qa-bug-report/SKILL.md +0 -877
  219. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
  220. package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +0 -148
  221. package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +0 -46
  222. package/skills/eng-qa-bug-report/references/3-bug-to-test.md +0 -45
  223. package/skills/eng-qa-cypress-e2e/SKILL.md +0 -184
  224. package/skills/eng-qa-dev-guide/SKILL.md +0 -173
  225. package/skills/eng-qa-e2e/SKILL.md +0 -407
  226. package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -329
  227. package/skills/eng-qa-exploratory/SKILL.md +0 -196
  228. package/skills/eng-qa-gate/SKILL.md +0 -377
  229. package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
  230. package/skills/eng-qa-graphql-contract/SKILL.md +0 -263
  231. package/skills/eng-qa-quality-report/SKILL.md +0 -419
  232. package/skills/eng-qa-test-plan/SKILL.md +0 -473
  233. package/skills/eng-qa-testsprite/SKILL.md +0 -332
  234. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
  235. package/skills/eng-qa-unit-test/SKILL.md +0 -478
  236. package/skills/eng-scraper/SKILL.md +0 -260
  237. package/skills/eng-scraper/references/1-puppeteer.md +0 -140
  238. package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +0 -82
  239. package/skills/eng-scraper/references/3-anti-bot.md +0 -94
  240. package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +0 -137
  241. package/skills/eng-scraper-robot-builder/SKILL.md +0 -377
  242. package/skills/eng-security-cybersecurity/SKILL.md +0 -250
  243. package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +0 -331
  244. package/skills/eng-security-cybersecurity/references/2-secrets-management.md +0 -31
  245. package/skills/eng-security-cybersecurity/references/3-input-validation.md +0 -43
  246. package/skills/eng-security-cybersecurity/references/4-compliance.md +0 -20
  247. package/skills/eng-security-patch/SKILL.md +0 -388
  248. package/skills/eng-security-threat-model/SKILL.md +0 -171
  249. package/skills/eng-security-triage/SKILL.md +0 -276
  250. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
  251. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
  252. package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
  253. package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
  254. package/templates/engineering/qa/qa.quality-report-template.md +0 -130
  255. package/workflows/engineering/eng.security-audit.md +0 -319
  256. package/workflows/engineering/eng.security-incident.md +0 -281
  257. package/workflows/engineering/eng.security-pipeline.md +0 -219
  258. package/workflows/engineering/eng.security-review.md +0 -241
  259. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -57
  260. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -57
  261. package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -68
  262. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -209
  263. package/workflows/engineering/qa/eng.qa-quality-report.md +0 -85
  264. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
  265. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
  266. /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
@@ -1,433 +0,0 @@
1
- ---
2
- name: eng-data-orchestrator
3
- description: >
4
- Playbook operacional para gerenciamento de DAGs e pipelines orquestrados:
5
- criação de DAGs, retry strategies, monitoramento de tasks, alertas e troubleshooting.
6
- Trigger: Use para criar, manter ou depurar DAGs no $DATA_ORCHESTRATOR.
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: "[criar|monitorar|retry|alerta|debug] [nome-do-dag]"
15
- disable-model-invocation: false
16
- ---
17
-
18
- # Eng Data Orchestrator — Gerenciamento de DAGs e Orquestração
19
-
20
- Você é um **especialista em orquestração de pipelines de dados** com domínio em criação e manutenção de DAGs, estratégias de retry, monitoramento de execução e resposta a falhas. Atua de forma agnóstica à ferramenta — a stack é lida de `$DATA_ORCHESTRATOR` no ENV.md.
21
-
22
- ## Objetivo
23
-
24
- Criar, manter e depurar DAGs de forma confiável — garantindo que os pipelines executem no horário correto, com retry adequado, alertas configurados e troubleshooting documentado.
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_ORCHESTRATOR` | Orquestrador (ex: airflow, prefect, dagster, glue-scheduler) |
35
- | `DATA_ETL_TOOL` | Ferramenta ETL referenciada pelas tasks (ex: aws_glue, dbt, spark) |
36
- | `DATA_REPO` | Repositório onde ficam os DAGs e scripts |
37
- | `ALERTS_CHANNEL` | Canal Slack de alertas do projeto (genérico, compartilhado por todos os hubs) |
38
-
39
- > Se `DATA_ORCHESTRATOR` não estiver definido, perguntar ao usuário antes de prosseguir.
40
-
41
- ---
42
-
43
- ## Referência por Orquestrador
44
-
45
- Este skill adapta os exemplos ao `$DATA_ORCHESTRATOR` identificado no ENV.md:
46
-
47
- | `DATA_ORCHESTRATOR` | UI de monitoramento | Unidade de agendamento | Unidade de execução |
48
- |---------------------|--------------------|-----------------------|--------------------|
49
- | `airflow` | Airflow Web UI / CLI | DAG | Task (Operator) |
50
- | `prefect` | Prefect UI / CLI | Flow | Task |
51
- | `dagster` | Dagster UI / CLI | Job | Op / Asset |
52
- | `glue-scheduler` | AWS Console / CloudWatch | Trigger | Glue Job |
53
-
54
- > Nos exemplos abaixo, os termos "DAG", "task" e "operador" se referem ao conceito equivalente no orquestrador do projeto.
55
-
56
- ---
57
-
58
- ## Fluxos de Trabalho
59
-
60
- ### Fluxo A — Criar DAG novo
61
-
62
- #### 1. Definir estrutura do DAG
63
-
64
- Antes de escrever código, confirmar:
65
-
66
- | Informação | Pergunta |
67
- |---|---|
68
- | Nome do pipeline | Qual o nome? (ex: `bronze_pedidos_erp`, `silver_clientes`) |
69
- | Schedule | Qual a frequência? (ex: diária 06h, horária, sob demanda) |
70
- | Dependências | Depende de outro DAG? (ex: silver só roda após bronze) |
71
- | Owner | Qual o responsável? (email) |
72
- | Canal de alerta | Para onde vai o alerta de falha? (`$ALERTS_CHANNEL`) |
73
- | SLA | Até quando precisa terminar? |
74
-
75
- #### 2. Estrutura padrão de DAG (Airflow)
76
-
77
- ```python
78
- """
79
- DAG: {nome_pipeline}
80
- Descrição: {o que faz}
81
- Schedule: {cron ou @daily}
82
- Owner: {email}
83
- SLA: {horário limite}
84
- """
85
- from datetime import datetime, timedelta
86
- from airflow import DAG
87
- from airflow.operators.python import PythonOperator
88
-
89
- DEFAULT_ARGS = {
90
- 'owner': '{owner_email}',
91
- 'depends_on_past': False,
92
- 'start_date': datetime(2026, 1, 1),
93
- 'email': ['{owner_email}'],
94
- 'email_on_failure': True,
95
- 'email_on_retry': False,
96
- 'retries': 2,
97
- 'retry_delay': timedelta(minutes=15),
98
- 'sla': timedelta(hours=2), # alerta se task não terminar em 2h
99
- }
100
-
101
- with DAG(
102
- dag_id='{nome_pipeline}',
103
- default_args=DEFAULT_ARGS,
104
- description='{descrição}',
105
- schedule_interval='0 6 * * *', # diário às 06h UTC
106
- catchup=False, # não reprocessar histórico ao ativar
107
- tags=['{camada}', '{dominio}'],
108
- ) as dag:
109
-
110
- extract_task = PythonOperator(
111
- task_id='extract',
112
- python_callable=extract,
113
- op_kwargs={'data_referencia': '{{ ds }}'}, # data de execução do DAG
114
- )
115
-
116
- load_task = PythonOperator(
117
- task_id='load_bronze',
118
- python_callable=load_bronze,
119
- op_kwargs={'data_referencia': '{{ ds }}'},
120
- )
121
-
122
- # Dependência: extract → load
123
- extract_task >> load_task
124
- ```
125
-
126
- #### 3. Equivalente Prefect
127
-
128
- ```python
129
- from prefect import flow, task
130
- from prefect.schedules import CronSchedule
131
- from datetime import timedelta
132
-
133
- @task(retries=2, retry_delay_seconds=900)
134
- def extract(data_referencia: str):
135
- ...
136
-
137
- @task(retries=2, retry_delay_seconds=900)
138
- def load_bronze(data_referencia: str):
139
- ...
140
-
141
- @flow(
142
- name="{nome_pipeline}",
143
- description="{descrição}",
144
- )
145
- def pipeline_flow(data_referencia: str = None):
146
- raw = extract(data_referencia)
147
- load_bronze(data_referencia)
148
- ```
149
-
150
- #### 4. Equivalente Dagster
151
-
152
- ```python
153
- from dagster import job, op, schedule, OpExecutionContext
154
-
155
- @op
156
- def extract_op(context: OpExecutionContext):
157
- data_referencia = context.op_config.get('data_referencia')
158
- context.log.info(f"Extraindo {data_referencia}")
159
- ...
160
-
161
- @op
162
- def load_bronze_op(context: OpExecutionContext, raw_data):
163
- ...
164
-
165
- @job
166
- def bronze_pipeline():
167
- load_bronze_op(extract_op())
168
-
169
- @schedule(
170
- cron_schedule="0 6 * * *",
171
- job=bronze_pipeline,
172
- execution_timezone="UTC",
173
- )
174
- def bronze_pipeline_schedule(_context):
175
- return {}
176
- ```
177
-
178
- ---
179
-
180
- ### Fluxo B — Configurar Retry Strategy
181
-
182
- Regras de retry por criticidade do pipeline:
183
-
184
- | Camada | Retries | Retry delay | Quando usar |
185
- |--------|---------|-------------|-------------|
186
- | Bronze (ingestão) | 3 | 15 min | Fonte pode ter instabilidade temporária |
187
- | Silver (transformação) | 2 | 5 min | Falha raramente é transiente |
188
- | Gold (modelagem) | 1 | 5 min | Falha geralmente é de dado ou lógica |
189
- | Alertas / notificações | 1 | 1 min | Falha de alerta não deve bloquear pipeline |
190
-
191
- **Regra para `retry_exponential_backoff`** (Airflow):
192
-
193
- ```python
194
- DEFAULT_ARGS = {
195
- 'retries': 3,
196
- 'retry_delay': timedelta(minutes=5),
197
- 'retry_exponential_backoff': True, # 5m → 10m → 20m
198
- 'max_retry_delay': timedelta(hours=1),
199
- }
200
- ```
201
-
202
- **Quando NÃO usar retry**:
203
- - ❌ Falha de schema (dado estruturalmente inválido) — retry não resolve
204
- - ❌ Credencial inválida — retry não resolve, precisa de intervenção humana
205
- - ✅ Timeout de rede, fonte temporariamente indisponível, lock de banco
206
-
207
- ---
208
-
209
- ### Fluxo C — Configurar Alertas
210
-
211
- #### Alerta de falha de task (Airflow + Slack)
212
-
213
- ```python
214
- from airflow.providers.slack.operators.slack_webhook import SlackWebhookOperator
215
-
216
- def alert_on_failure(context):
217
- """Callback de alerta para falha de task."""
218
- dag_id = context['dag'].dag_id
219
- task_id = context['task_instance'].task_id
220
- execution_date = context['execution_date'].strftime('%Y-%m-%d')
221
- log_url = context['task_instance'].log_url
222
-
223
- message = (
224
- f":red_circle: *Pipeline falhou*\n"
225
- f"• DAG: `{dag_id}`\n"
226
- f"• Task: `{task_id}`\n"
227
- f"• Data: `{execution_date}`\n"
228
- f"• Logs: {log_url}"
229
- )
230
-
231
- SlackWebhookOperator(
232
- task_id='slack_alert',
233
- slack_webhook_conn_id='slack_data_alerts',
234
- message=message,
235
- ).execute(context)
236
-
237
-
238
- DEFAULT_ARGS = {
239
- 'on_failure_callback': alert_on_failure,
240
- ...
241
- }
242
- ```
243
-
244
- > Se `ALERTS_CHANNEL` estiver definido no ENV.md, usar esse canal.
245
- > Para Prefect e Dagster, adaptar usando seus mecanismos nativos de notificação (automations / sensors).
246
-
247
- #### SLA Miss (Airflow)
248
-
249
- ```python
250
- def sla_miss_callback(dag, task_list, blocking_task_list, slas, blocking_tis):
251
- """Callback quando o SLA não é cumprido."""
252
- message = f":warning: *SLA Miss* no DAG `{dag.dag_id}` — tasks atrasadas: {task_list}"
253
- # enviar para $ALERTS_CHANNEL
254
-
255
- with DAG(
256
- ...
257
- sla_miss_callback=sla_miss_callback,
258
- ) as dag:
259
- task = PythonOperator(
260
- ...
261
- sla=timedelta(hours=2),
262
- )
263
- ```
264
-
265
- ---
266
-
267
- ### Fluxo D — Monitorar Execução
268
-
269
- #### Verificações rápidas por orquestrador
270
-
271
- **Airflow CLI:**
272
- ```bash
273
- # Ver estado de todas as runs do DAG nas últimas N execuções
274
- airflow dags state <dag_id> <execution_date>
275
-
276
- # Ver tasks de uma run específica
277
- airflow tasks states-for-dag-run <dag_id> <execution_date>
278
-
279
- # Listar DAGs com falha
280
- airflow dags list-runs --dag-id <dag_id> --state failed --limit 10
281
-
282
- # Ver logs de uma task
283
- airflow tasks logs <dag_id> <task_id> <execution_date>
284
- ```
285
-
286
- **Consulta SQL na tabela de auditoria** (se `gold.pipeline_audit` existir):
287
-
288
- ```sql
289
- -- Ver status das últimas execuções
290
- SELECT
291
- pipeline,
292
- data_referencia,
293
- status,
294
- rows_extracted,
295
- rows_loaded,
296
- duration_seconds,
297
- ingested_at
298
- FROM gold.pipeline_audit
299
- WHERE pipeline = '<nome_pipeline>'
300
- ORDER BY data_referencia DESC, ingested_at DESC
301
- LIMIT 20;
302
-
303
- -- Identificar pipelines com falha recorrente
304
- SELECT
305
- pipeline,
306
- COUNT(*) AS total_runs,
307
- SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS failed_runs,
308
- ROUND(SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS failure_rate_pct
309
- FROM gold.pipeline_audit
310
- WHERE ingested_at >= CURRENT_DATE - INTERVAL '30' DAY
311
- GROUP BY pipeline
312
- HAVING failure_rate_pct > 10
313
- ORDER BY failure_rate_pct DESC;
314
- ```
315
-
316
- ---
317
-
318
- ### Fluxo E — Troubleshooting de DAG
319
-
320
- #### Árvore de diagnóstico
321
-
322
- ```
323
- DAG não aparece na UI
324
- └─ Verificar: erro de sintaxe no arquivo Python
325
- └─ airflow dags list 2>&1 | grep <dag_id>
326
- └─ airflow dags report (Airflow 2+)
327
-
328
- Task ficou em estado QUEUED
329
- └─ Worker disponível? → verificar número de workers ativos
330
- └─ Pool com slots livres? → airflow pools list
331
-
332
- Task falhou com timeout
333
- └─ Aumentar execution_timeout na task
334
- └─ Verificar se fonte externa está lenta
335
-
336
- Task falhou com erro de credencial
337
- └─ Verificar Connection no Airflow (Admin → Connections)
338
- └─ Credencial expirou? → renovar via Secrets Manager
339
-
340
- Task falhou mas não ativou alerta
341
- └─ Verificar callback on_failure_callback está configurado
342
- └─ Verificar Connection do Slack está válida
343
- ```
344
-
345
- #### Reprocessamento manual
346
-
347
- ```bash
348
- # Limpar e re-executar tasks de uma data específica (Airflow)
349
- airflow tasks clear <dag_id> \
350
- --start-date <YYYY-MM-DD> \
351
- --end-date <YYYY-MM-DD> \
352
- --yes
353
-
354
- # Reexecutar o DAG a partir de uma data (backfill)
355
- airflow dags backfill <dag_id> \
356
- --start-date <YYYY-MM-DD> \
357
- --end-date <YYYY-MM-DD>
358
- ```
359
-
360
- > ⚠️ Usar `backfill` com `catchup=False` configurado pode não ter o efeito esperado.
361
- > Verificar a configuração do DAG antes de reprocessar histórico.
362
-
363
- ### Skills invocados durante a execução do skill
364
-
365
- | Passo | Skill | Condição |
366
- |-------|-------|----------|
367
- | — | Nenhuma — skill autocontida | — |
368
-
369
- ---
370
-
371
- ## Boas Práticas
372
-
373
- ### Estrutura de repositório
374
-
375
- ```
376
- $DATA_REPO/
377
- dags/
378
- bronze/ ← DAGs de ingestão bruta
379
- silver/ ← DAGs de transformação
380
- gold/ ← DAGs de modelagem e agregação
381
- jobs/
382
- bronze/ ← scripts Python chamados pelas tasks
383
- silver/
384
- gold/
385
- plugins/ ← operadores e hooks customizados (se necessário)
386
- tests/
387
- dags/ ← testes de integridade dos DAGs
388
- ```
389
-
390
- ### Regras de nomenclatura de DAGs
391
-
392
- ```
393
- {camada}_{dominio}_{entidade}
394
-
395
- Exemplos válidos:
396
- bronze_erp_pedidos
397
- silver_vendas_clientes
398
- gold_insights_pedidos_por_cliente
399
- ```
400
-
401
- ### Checklist antes de ativar um DAG novo
402
-
403
- ```
404
- [ ] DAG testado localmente (airflow dags test <dag_id> <execution_date>)
405
- [ ] catchup=False configurado (evita backfill automático ao ativar)
406
- [ ] start_date no passado (nunca usar datetime.now() como start_date)
407
- [ ] retries e retry_delay configurados
408
- [ ] on_failure_callback configurado com alerta no $ALERTS_CHANNEL
409
- [ ] sla configurado para tasks críticas
410
- [ ] Tags adicionadas (camada + domínio)
411
- [ ] DAG file commitado em $DATA_REPO
412
- ```
413
-
414
- ---
415
-
416
- ## Regras Críticas
417
-
418
- ### Nunca faça
419
-
420
- - ❌ Usar `datetime.now()` como `start_date` — o Airflow precisa de data fixa no passado
421
- - ❌ Ativar DAG sem `catchup=False` quando não quer backfill
422
- - ❌ Hardcodar credenciais no DAG — usar Connections ou Secrets Manager
423
- - ❌ `depends_on_past=True` sem entender o impacto (bloqueia se run anterior falhar)
424
- - ❌ Silenciar exceções dentro de tasks — o Airflow não marcará como falha
425
-
426
- ### Sempre faça
427
-
428
- - ✅ Testar DAG localmente antes de subir para produção
429
- - ✅ Configurar `on_failure_callback` em todos os DAGs que afetam gold
430
- - ✅ Usar `{{ ds }}` (data de execução do DAG) em vez de `datetime.now()` dentro das tasks
431
- - ✅ Nomear tasks de forma descritiva (não `task_1`, `task_2`)
432
- - ✅ Versionar DAGs no `$DATA_REPO` — nunca editar direto na UI
433
- - ✅ Documentar dependências entre DAGs no doc do pipeline