data_drain 0.2.0 → 0.2.2

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.
@@ -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 |