data_drain 0.1.19 → 0.2.1
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +25 -0
- data/CLAUDE.md +4 -0
- data/README.md +66 -171
- data/docs/IMPROVEMENT_PLAN.md +1162 -0
- data/docs/execution/archive/v0.2.0.agente-review.md +125 -0
- data/docs/execution/archive/v0.2.0.md +812 -0
- data/docs/glue_pyspark_example.py +60 -0
- data/lib/data_drain/engine.rb +53 -40
- data/lib/data_drain/file_ingestor.rb +40 -25
- data/lib/data_drain/record.rb +24 -3
- data/lib/data_drain/storage/s3.rb +48 -6
- data/lib/data_drain/validations.rb +17 -0
- data/lib/data_drain/version.rb +1 -1
- data/lib/data_drain.rb +2 -0
- data/skill/SKILL.md +215 -0
- data/skill/references/antipatrones.md +242 -0
- data/skill/references/api-detallada.md +257 -0
- data/skill/references/eventos-telemetria.md +154 -0
- metadata +11 -2
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Observaciones del Agente — v0.2.0
|
|
2
|
+
|
|
3
|
+
**Reviewer:** opencode/big-pickle
|
|
4
|
+
**Fecha:** 2026-04-13
|
|
5
|
+
**Plan revisado:** `docs/execution/v0.2.0.md`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Veredicto General
|
|
10
|
+
|
|
11
|
+
El plan es **sólido y bien estructurado**. Los problemas identificados son menores y no bloquean la ejecución.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Problemas a Addressar Antes de Ejecutar
|
|
16
|
+
|
|
17
|
+
### 1. `aws_region` también necesita escape en S3
|
|
18
|
+
|
|
19
|
+
**Ubicación:** `lib/data_drain/storage/s3.rb:11`
|
|
20
|
+
|
|
21
|
+
```ruby
|
|
22
|
+
connection.query("SET s3_region='#{@config.aws_region}';")
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
El plan de Item 1 solo propone `escape_sql` para `aws_access_key_id` y `aws_secret_access_key`, pero `aws_region` también se interpola en SQL. Un valor con `'` rompería el query.
|
|
26
|
+
|
|
27
|
+
**Acción requerida:** Incluir `aws_region` en la función `escape_sql` del plan.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
### 2. Falta convención `:integration` tag
|
|
32
|
+
|
|
33
|
+
**Ubicación:** `spec/spec_helper.rb`
|
|
34
|
+
|
|
35
|
+
El plan menciona "marcar como `:integration` y skip por default en CI" pero no hay convención definida en `spec_helper.rb`.
|
|
36
|
+
|
|
37
|
+
**Acción requerida:** Antes de Fase 2, agregar en `spec_helper.rb`:
|
|
38
|
+
```ruby
|
|
39
|
+
config.define_derived_metadata(:integration) do |metadata|
|
|
40
|
+
metadata[:skip] = "Integration test — requires Postgres real"
|
|
41
|
+
end
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### 3. Versión de aws-sdk-s3 no verificada
|
|
47
|
+
|
|
48
|
+
**Ubicación:** Gemfile
|
|
49
|
+
|
|
50
|
+
El plan usa `Aws::S3::Client.new(stub_responses: true)` (requiere aws-sdk-s3 ~> 1.114 según IMPROVEMENT_PLAN.md).
|
|
51
|
+
|
|
52
|
+
**Acción requerida:** En Fase 0, verificar:
|
|
53
|
+
```bash
|
|
54
|
+
bundle exec ruby -e "require 'bundler'; puts Bundler.load.specs.find { |s| s.name == 'aws-sdk-s3' }.version"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Si es < 1.114, actualizarla en Gemfile.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### 4. Posible conflicto entre `before(:suite)` de spec_helper y ParquetFixtures
|
|
62
|
+
|
|
63
|
+
**Ubicación:** `spec/spec_helper.rb` vs `spec/support/parquet_fixtures.rb`
|
|
64
|
+
|
|
65
|
+
El `spec_helper.rb` tiene `config.before(:suite)` que configura DataDrain. Si `ParquetFixtures.generate!` se ejecuta ANTES, fallará porque la config no está seteada.
|
|
66
|
+
|
|
67
|
+
**Acción requerida:** Mover la configuración de DataDrain a un archivo separado en `spec/support/` que se cargue antes, o asegurar que ParquetFixtures se ejecuta DESPUÉS del `before(:suite)` de spec_helper.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Preguntas a Resolver Antes de Ejecutar
|
|
72
|
+
|
|
73
|
+
### Q1: ¿Qué caracteres necesita escapar `escape_sql`?
|
|
74
|
+
|
|
75
|
+
El plan propone:
|
|
76
|
+
```ruby
|
|
77
|
+
def escape_sql(value)
|
|
78
|
+
value.to_s.gsub("'", "''")
|
|
79
|
+
end
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
DuckDB usa SQL estándar escaping. ¿Hay que escapar también `\`, `"`, o caracteres de control?
|
|
83
|
+
|
|
84
|
+
**Recomendación:** Investigar con un test manual en `bin/console` antes de implementar.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Q2: ¿Hay callers que usan `public.table_name` con schema?
|
|
89
|
+
|
|
90
|
+
El plan de Item 2 restringe `table_name` a identificadores simples (`\A[a-zA-Z_][a-zA-Z0-9_]*\z`). Si hay callers que usan `"public.versions"`, romperá.
|
|
91
|
+
|
|
92
|
+
**Acción requerida:** Buscar en el monorepo consumidor antes de merge:
|
|
93
|
+
```bash
|
|
94
|
+
rg "table_name.*public\." --type ruby
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Recomendaciones Opcionales (Nice to Have)
|
|
100
|
+
|
|
101
|
+
### R1: Documentar el hook de cleanup de SpecHelper
|
|
102
|
+
|
|
103
|
+
Agregar comentario en `spec_helper.rb` explicando que `config.after(:each)` limpia `tmp/test_lake` y que cualquier nuevo test que escriba archivos debe usar este directorio.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Checkpoint Sugerido Antes de Iniciar
|
|
108
|
+
|
|
109
|
+
- [ ] aws-sdk-s3 versión verificada
|
|
110
|
+
- [ ] Convención `:integration` tag definida en spec_helper.rb
|
|
111
|
+
- [ ] Pregunta Q1 (escape_sql) resuelta
|
|
112
|
+
- [ ] Pregunta Q2 (schema.table) verificada en caller
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Archivos a Modificar Durante la Ejecución
|
|
117
|
+
|
|
118
|
+
| Fase | Archivo | Cambio |
|
|
119
|
+
|------|---------|--------|
|
|
120
|
+
| 0 | `Gemfile` | Agregar simplecov |
|
|
121
|
+
| 0 | `spec/spec_helper.rb` | Agregar convención :integration |
|
|
122
|
+
| 1 | `lib/data_drain/validations.rb` | Crear |
|
|
123
|
+
| 1 | `lib/data_drain/engine.rb` | Agregar validación |
|
|
124
|
+
| 1 | `lib/data_drain/file_ingestor.rb` | Agregar validación |
|
|
125
|
+
| 3 | `lib/data_drain/storage/s3.rb` | escape_sql para aws_region también |
|