data_drain 0.2.2 → 0.3.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.
@@ -0,0 +1,146 @@
1
+ # Análisis v0.3.1 — Observaciones para revisión (actualizado)
2
+
3
+ ## 1. Baseline real vs plan
4
+
5
+ | Aspecto | Plan original estimaba | Realidad medida |
6
+ |---------|----------------------|-----------------|
7
+ | Ofensas RuboCop en `spec/` | ~48 | **37** (12 files) |
8
+ | `COUNT(*)` en `lib/` | no cuantificado | **3** (engine.rb×2, file_ingestor.rb×1) |
9
+ | `stub_const` en specs | 2 files (solo S3) | **2 files: S3 + GlueRunner** ← scope item 19 ampliado |
10
+ | Coverage threshold | 80% | **80%** (real 97.49%) |
11
+ | CI branch trigger | main | **master** (bug pre-existente) |
12
+ | Matrix Ruby | 3.4.4 solo | **3.4.4 solo** |
13
+
14
+ ## 2. Desglose de 37 ofensas RuboCop en spec/
15
+
16
+ ```
17
+ Metrics/BlockLength 29 ← describe/context blocks largos (NO auto-correct)
18
+ Layout/LineLength 5 ← safe auto-correct
19
+ Naming/VariableNumber 2 ← renombrar o config
20
+ Style/MultilineBlockChain 1 ← auto-correct
21
+ ---
22
+ Total 37
23
+ ```
24
+
25
+ **Nota:** Las 29 de BlockLength NO se reducen con auto-correct. Se resuelven con la exclusión en `.rubocop.yml`. El autocorrect solo arreglará ~6 de las 37 (LineLength + MultilineBlockChain).
26
+
27
+ ## 3. Duplicación `build_path` en Local y S3 (Item 13)
28
+
29
+ Ambos tienen la misma lógica (local.rb lines 26-29, s3.rb lines 21-24). `Storage::Base` existe con la interfaz pero sin lógica compartida. La extracción a `Base#build_path_base` es trivial (~10 min).
30
+
31
+ ## 4. Decisiones tomadas (incorporadas al plan)
32
+
33
+ 1. **Ruby mínimo: `>= 3.2`** — Ruby 3.0/3.1 EOL. CI 3 versiones. Alineado con `TargetRubyVersion: 3.2`. BREAKING preventivo en CHANGELOG.
34
+ 2. **Postgres en CI: mocks suficientes** — Tests de Engine usan `instance_double(PG::Connection)` y `instance_double(PG::Result)`. NO se levanta Postgres como service container.
35
+ 3. **`rubocop-rspec`: descartado para v0.3.1** — Ampliaría scope. Documentado como ítem 25 post-roadmap.
36
+
37
+ ## 5. Issues del plan original (resolución)
38
+
39
+ | # | Issue | Resolución |
40
+ |---|-------|-----------|
41
+ | 4.1 | `rubocop-rspec` opcional ambiguo | Descartado explícitamente (decisión 3) |
42
+ | 4.2 | Items 14 y 17 con dependencia implícita en CI | **Fusionados en Fase 1** |
43
+ | 4.3 | Workflow CI en `master` no `main` | Incluido como fix en Fase 1 |
44
+ | 4.4 | DuckDB binary amd64-only | OK por ahora (runners amd64) |
45
+ | 4.5 | Compatibilidad DuckDB + Ruby 3.2/3.3 | Verificación explícita en Fase 1.7 |
46
+ | 4.6 | Postgres en CI | Decisión 2 resuelve (mocks) |
47
+
48
+ ## 6. Nuevos issues encontrados
49
+
50
+ ### 6.1 YAML de la matrix Ruby malformado (BUG)
51
+
52
+ **Severidad:** Bug — impide ejecución
53
+
54
+ El bloque YAML en Fase 1.5 tiene `steps:` anidado dentro de `strategy:`, que es inválido en GitHub Actions. Los `steps` deben estar al nivel del `job`, no dentro de `strategy`.
55
+
56
+ ```yaml
57
+ # INCORRECTO (lo que dice el plan)
58
+ strategy:
59
+ fail-fast: false
60
+ matrix:
61
+ ruby: ["3.2", "3.3", "3.4"]
62
+ steps: # ← esto está mal ubicado
63
+ - uses: actions/checkout@v4
64
+
65
+ # CORRECTO
66
+ strategy:
67
+ fail-fast: false
68
+ matrix:
69
+ ruby: ["3.2", "3.3", "3.4"]
70
+ jobs:
71
+ build:
72
+ runs-on: ubuntu-latest
73
+ steps:
74
+ - uses: actions/checkout@v4
75
+ ```
76
+
77
+ **Acción:** Reescribir correctamente al implementar. No bloquea el plan conceptual.
78
+
79
+ ### 6.2 Badge URL depende del nombre del workflow
80
+
81
+ **Severidad:** Bajo — verificar al implementar
82
+
83
+ El badge usa:
84
+ ```markdown
85
+ [![CI](https://github.com/gedera/data_drain/actions/workflows/main.yml/badge.svg)]
86
+ ```
87
+
88
+ Es correcto si el workflow se llama `main.yml`. Si se renombra a `ci.yml`, el badge rompe. **Acción:** Verificar el nombre real del archivo del workflow antes de agregar el badge.
89
+
90
+ ### 6.3 Estimado YARD puede ser bajo
91
+
92
+ **Severidad:** Estimación — ajustar expectativa
93
+
94
+ El plan dice 4-6h para item 12. Scope real:
95
+
96
+ | Componente | Items a documentar |
97
+ |------------|-------------------|
98
+ | Configuration | ~21 (18 attrs + 3 métodos) |
99
+ | Observability | 3 |
100
+ | Observability::Timing | 2 |
101
+ | Storage::Base/Local/S3 | ~12 |
102
+ | Errors | 4-5 |
103
+ | Record | 5 |
104
+ | **Total** | **~47 items** |
105
+
106
+ × 3-5 min por item = **5-8h** estimado.
107
+
108
+ **Acción:** Esperar 5-8h, no 4-6h. El Plan B de dividir YARD en dos releases sigue siendo correcto si se extiende.
109
+
110
+ ### 6.4 Bundler cache no se usa en CI
111
+
112
+ **Severidad:** Mejora opcional post-release
113
+
114
+ El workflow actual tiene `bundler-cache: false`. Cada job baja todas las gems desde cero (~20-30s por job × 3 jobs = ~6min extra). Podría agregarse `bundler-cache: true` para bajar tiempos, pero **no está en scope de v0.3.1**. Documentar como follow-up opcional.
115
+
116
+ ### 6.5 Marcar items `[~]` en el roadmap antes de ejecutar
117
+
118
+ **Severidad:** Práctica operativa
119
+
120
+ Las convenciones de `IMPROVEMENT_PLAN.md` dicen que antes de empezar un item hay que marcarlo `[~]` (en progreso). Si el ejecutor es un agente, debe hacerlo para mantener la memoria del proyecto consistente.
121
+
122
+ ## 7. Observaciones menores (sin acción)
123
+
124
+ - DuckDB binary necesario antes de `bundle install` — correcto, el gem compila la C extension
125
+ - Cache rubocop (`~/.cache/rubocop_cache`) no entra en conflicto con el paso de DuckDB — correcto
126
+ - Fase 1.7 "verificar localmente" contradice "confiar en CI si no hay Rubies" — es intencional y correcto
127
+ - Commit granularity en Fase 1 flexible — correcto, pero considerar rebase interactivo al final si se separan
128
+
129
+ ## 8. Resumen de acciones
130
+
131
+ | Prioridad | Acción |
132
+ |-----------|--------|
133
+ | **Bloqueante** | Reescribir YAML de matrix Ruby en Fase 1.5 |
134
+ | **Verificar** | Nombre del workflow para el badge (Fase 2) |
135
+ | **Expectativa** | Item 12 toma 5-8h, no 4-6h |
136
+ | **Post-release** | Bundler cache como follow-up opcional |
137
+ | **Conveniencia** | Marcar items `[~]` en roadmap antes de ejecutar |
138
+
139
+ ## 9. Evaluación final
140
+
141
+ **El plan es ejecutable como está.** Las correcciones necesarias son menores:
142
+
143
+ 1. **Corrección material:** reescribir el YAML de la matrix Ruby
144
+ 2. **Ajuste de expectativa:** item 12 estimado 5-8h
145
+
146
+ El resto son verificaciones o mejoras opcionales. Las dependencias están correctas, los checkpoints son claros, y los Plan B cubren los escenarios de bloqueo.