Contexto
Actualmente la activación de extensiones (como Plutarco) se maneja con targets del Makefile (make plutarco-setup, make plutarco-status). Esto funciona para el equipo actual (1 extensión, 3 ETLs, pocos contribuidores), pero a medida que el proyecto crezca necesitaremos un mecanismo más robusto.
Señales de que es momento de implementar esto
- Más de 2 extensiones activas con ETLs interdependientes
- Contribuidores nuevos que tardan más de 5 minutos en entender el setup
- Lógica condicional compleja en el Makefile (if/else bash)
- Necesidad de reintentos, progreso visual, o verificación de estado en múltiples capas
Propuesta
CLI en Go (binario único, sin dependencias externas) con subcomandos:
```bash
Listar extensiones disponibles y su estado
apimetro-cli ext list
Activar una extensión (DDL + deps + ETL)
apimetro-cli ext activate plutarco
Ver estado detallado
apimetro-cli ext status plutarco
Desactivar (trunca tablas, no borra esquema)
apimetro-cli ext deactivate plutarco
Health check general
apimetro-cli doctor
```
Subcomando doctor
Verifica las 3 capas:
- DB: Conexión, esquemas, tablas, permisos
- API: Proceso corriendo, endpoints respondiendo
- Extensiones: Tablas con datos, ETLs disponibles, CSVs presentes
Subcomando ext activate <nombre>
Flujo orquestado:
- Verifica que Docker DEV esté corriendo
- Aplica migraciones DDL (idempotente)
- Instala dependencias Python si no existen
- Verifica presencia de archivos fuente (CSVs/shapefiles)
- Ejecuta ETLs en orden correcto
- Valida conteo de registros post-carga
- Reporta resultado con colores/emojis en terminal
Registro de extensiones
Cada extensión se describe en un archivo YAML:
```yaml
extensions/plutarco.yaml
name: plutarco
description: Datos geoespaciales INEGI + afluencia transporte para VFT
version: 1.0
tables:
- plutarco.agebs
- plutarco.afluencia_linea
- plutarco.afluencia_estacion
- plutarco.catalogo_homologacion
ddl:
- db/init/init_plutarco.sql
- db/migrations/seed_catalogo_homologacion.sql
etl:
- script: ETL/DataCharge/LoadAfluencia.py
requires: ETL/Data/Pesos/afluencia_diaria_historica.xlsx
- script: ETL/DataCharge/LoadAfluenciaEstacion.py
requires: ETL/Data/Pesos/afluenciastc_simple_04_2026.csv
- script: ETL/DataCharge/LoadAgebs.py
requires: ETL/Data/AGEBS/
dependencies:
python: ETL/requirements.txt
```
Decisiones técnicas
- Go (no bash/Python): mismo stack que la API, binario único, cross-platform
- Sin framework CLI pesado: solo
flag stdlib o cobra si se justifica
- Config-driven: extensiones se registran vía YAML, no hardcoded
- Idempotente: ejecutar dos veces no rompe nada
- Colores solo en TTY: output plano si se redirige a archivo
Dependencia
- Requiere que la estructura de extensiones se estabilice (al menos 2 extensiones antes de abstraer)
- No bloquea ningún trabajo actual — el Makefile cubre las necesidades presentes
Criterios de aceptación
Contexto
Actualmente la activación de extensiones (como Plutarco) se maneja con targets del Makefile (
make plutarco-setup,make plutarco-status). Esto funciona para el equipo actual (1 extensión, 3 ETLs, pocos contribuidores), pero a medida que el proyecto crezca necesitaremos un mecanismo más robusto.Señales de que es momento de implementar esto
Propuesta
CLI en Go (binario único, sin dependencias externas) con subcomandos:
```bash
Listar extensiones disponibles y su estado
apimetro-cli ext list
Activar una extensión (DDL + deps + ETL)
apimetro-cli ext activate plutarco
Ver estado detallado
apimetro-cli ext status plutarco
Desactivar (trunca tablas, no borra esquema)
apimetro-cli ext deactivate plutarco
Health check general
apimetro-cli doctor
```
Subcomando
doctorVerifica las 3 capas:
Subcomando
ext activate <nombre>Flujo orquestado:
Registro de extensiones
Cada extensión se describe en un archivo YAML:
```yaml
extensions/plutarco.yaml
name: plutarco
description: Datos geoespaciales INEGI + afluencia transporte para VFT
version: 1.0
tables:
ddl:
etl:
requires: ETL/Data/Pesos/afluencia_diaria_historica.xlsx
requires: ETL/Data/Pesos/afluenciastc_simple_04_2026.csv
requires: ETL/Data/AGEBS/
dependencies:
python: ETL/requirements.txt
```
Decisiones técnicas
flagstdlib ocobrasi se justificaDependencia
Criterios de aceptación
apimetro-clicompilable congo buildext listmuestra extensiones con estado (activada/no activada/parcial)ext activate plutarcoejecuta el flujo completodoctorreporta salud de DB + API + extensiones--helpdocumenta todos los subcomandos