data_drain 0.3.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +40 -1
- data/CHANGELOG.md +38 -0
- data/CLAUDE.md +14 -0
- data/README.md +2 -0
- data/data_drain.gemspec +1 -1
- data/docs/IMPROVEMENT_PLAN.md +122 -21
- data/docs/execution/archive/v0.3.0-OBSERVACIONES.md +136 -0
- data/docs/execution/archive/v0.3.0.md +1111 -0
- data/docs/execution/archive/v0.3.1-OBSERVACIONES.md +146 -0
- data/docs/execution/archive/v0.3.1.md +842 -0
- data/lib/data_drain/engine.rb +1 -0
- data/lib/data_drain/observability.rb +2 -0
- data/lib/data_drain/storage/base.rb +12 -0
- data/lib/data_drain/storage/local.rb +1 -3
- data/lib/data_drain/storage/s3.rb +5 -3
- data/lib/data_drain/types/json_type.rb +1 -0
- data/lib/data_drain/validations.rb +2 -0
- data/lib/data_drain/version.rb +2 -1
- data/lib/data_drain.rb +1 -0
- data/skill/references/antipatrones.md +10 -0
- data/skill/references/postgres-tuning.md +14 -0
- metadata +6 -2
|
@@ -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
|
+
[]
|
|
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.
|