# 🎯 EL PROBLEMA REAL: provctl vs project-provisioning

**Fecha**: 2025-11-20
**Propósito**: Entender por qué hay dos proyectos y cuál es el problema a resolver
**Estado**: Análisis crítico

---

## 🏗️ Los Dos Proyectos

### Proyecto 1: project-provisioning

**Ubicación**: `/Users/Akasha/project-provisioning`

**Propósito**: Infraestructura y configuración de provisioning

**Contiene**:
- ✅ Definiciones KCL para infraestructura (orquestación, auth, DNS, etc)
- ✅ Módulo `provctl-bridge` con `catalog.rs`
- ✅ TOML catalog de servicios (`services-catalog.toml`)
- ✅ Generadores de IaC (Docker, K8s, Terraform)
- ✅ Scripts de instalación y configuración

**Scope**: "Cómo se provisiona la infraestructura"

---

### Proyecto 2: provctl

**Ubicación**: `/Users/Akasha/Development/provctl`

**Propósito**: Orquestación de máquinas y control de servicios

**Contiene**:
- ✅ CLI para control local de servicios (systemd, launchd, PID files)
- ✅ SSH-based machine orchestration
- ✅ Deployment strategies (rolling, blue-green, canary)
- ✅ Health checks y monitoring
- ✅ REST API y Leptos dashboard
- ✅ 332+ tests pasando

**Scope**: "Cómo se orquestan máquinas y se controlan servicios"

---

## 🔴 EL PROBLEMA REAL

### El Problema Identificado

**Pregunta que planteas**:
> "Por qué se ha creado provctl si ya existe provisioning?"

**Respuesta**: Resuelven problemas DIFERENTES

```
project-provisioning:
  ¿QUÉ INSTALAR?  (definiciones, configuración)

provctl:
  ¿CÓMO EJECUTAR LO QUE INSTALÉ?  (control, orquestación, monitoreo)
```

**Ejemplo**:
```
project-provisioning te dice:
  "El servicio syntaxis-api debe correr con 2 replicas, puerto 3000, con estas vars env"

provctl te dice:
  "Para ejecutar eso, corre: systemctl start syntaxis-api"
  "Y si falla, reintenta con exponential backoff"
  "Y si sigue fallando, alertame"
```

### Lo Que FALTA

Ambos proyectos existen pero **NO hablan entre sí**:

```
┌─────────────────────────────────────────────┐
│ project-provisioning                        │
│ ├─ Sabe QUÉ instalar (catalog.toml)        │
│ ├─ Genera IaC (Docker, K8s, Terraform)     │
│ ├─ Configura servicios (vars, ports, etc)  │
│ └─ Expone via catalog-cli.rs               │
└─────────────────────────────────────────────┘
             ↓ (¿cómo??)
        FALTA CONEXIÓN
             ↓
┌─────────────────────────────────────────────┐
│ provctl                                     │
│ ├─ Sabe CÓMO ejecutar servicios            │
│ ├─ Maneja ciclo de vida (start/stop/restart)
│ ├─ Monitorea health                        │
│ ├─ Orquesta múltiples máquinas             │
│ └─ Expone via API + CLI                    │
└─────────────────────────────────────────────┘

RESULTADO: Dos sistemas independientes
```

---

## 🎯 El Plan que Mencionas

**"Plan: Enhanced syntaxis Installer con integración provctl"**

**Objetivos**:
1. ✅ Detección inteligente de provctl
2. ✅ Sistema de presets (local, dev, staging, production)
3. ✅ Generación de config declarativa
4. ✅ Fallback cuando provctl no está disponible
5. ✅ Templates de provisioning para diferentes contextos

**Esto SIGNIFICA**:
```
syntaxis installer
  ↓
"¿Quieres gestionar servicios automáticamente?"
  ├─ SÍ: usar provctl
  │  ├─ Detectar provctl
  │  ├─ Generar config para provctl
  │  ├─ Orchestrar servicios
  │  └─ Monitorear
  │
  └─ NO: Manual
     ├─ Mostrar guía
     ├─ Generar scripts
     └─ Usuario hace todo a mano
```

---

## 🔗 La Conexión Que Falta

### HOY (Desconectado)

```
syntaxis/configs/services-catalog.toml
  └─ Define: 6 servicios

catalog-cli (provctl-bridge)
  └─ Lee: services-catalog.toml
  └─ Genera: Docker/K8s/Terraform

provctl CLI
  └─ Ignora: services-catalog.toml
  └─ Sabe: cómo ejecutar servicios (local)

syntaxis installer
  └─ No sabe: de provctl
  └─ No sabe: de servicios
```

### LO QUE SE NECESITA

```
syntaxis installer
  ↓
Leer: services-catalog.toml
  ├─ "¿Provctl está disponible?"
  │  ├─ SÍ:
  │  │  ├─ Generar config provctl
  │  │  ├─ Llamar: provctl config apply
  │  │  └─ Resultado: servicios gestionados
  │  │
  │  └─ NO:
  │     ├─ Mostrar guía manual
  │     ├─ Generar scripts
  │     └─ Usuario los ejecuta manualmente
  │
  └─ Generar presets:
     ├─ local: CLI solo
     ├─ dev: CLI + TUI + API + SurrealDB
     ├─ staging: API + Dashboard + SurrealDB
     └─ production: API + SurrealDB + NATS + HA
```

---

## 📊 Visión Actual vs Propuesta

### ACTUAL (Hoy)

```
El TOML catalog existe pero:
✗ syntaxis core NO lo usa
✗ provctl NO lo sabe
✓ provisioning tools lo leen (catalog-cli)
✓ NuShell scripts lo exploran

Resultado: Catalog es documentación, no fuente de verdad operativa
```

### PROPUESTA (Plan)

```
El TOML catalog sería:
✓ syntaxis installer lo leería
✓ provctl lo consumiría (para orchestration)
✓ provisioning tools lo generan
✓ Presets definidos en él

Resultado: Catalog es fuente de verdad para
  - QUÉ instalar (project-provisioning)
  - CÓMO ejecutar (provctl)
  - QUÉ presets usar (syntaxis installer)
```

---

## 🚨 Las Preguntas Correctas

### 1. ¿Cuál es el propósito del catalog?

**Opciones**:
- A) Documentación (está bien como está)
- B) Definición de presets (para sintaxis installer)
- C) Fuente de verdad para provctl
- D) Todo lo anterior

### 2. ¿Debería provctl leer el catalog?

**Si SÍ**:
```
provctl config apply --from-catalog syntaxis-dev
  ↓
  Lee services-catalog.toml
  ↓
  Genera configuración local
  ↓
  Inicia servicios
```

**Si NO**:
```
provctl config apply --from-file my-services.toml
  ↓
  Usuario copia servicios a archivo separado
  ↓
  Duplicación de definiciones
```

### 3. ¿Debería syntaxis installer usar provctl?

**Si SÍ**:
```
syntaxis-installer --preset dev
  ↓
  Detecta provctl disponible
  ↓
  Usa provctl para orchestration automática
  ↓
  Servicios se inician automáticamente
```

**Si NO**:
```
syntaxis-installer --preset dev
  ↓
  Muestra guía manual
  ↓
  Usuario corre comandos manualmente
```

---

## 💡 Propuesta de Solución

### Fase 1: Clarificar

Responder:
1. ¿Es el catalog TOML la fuente de verdad?
2. ¿Provctl debe consumirlo?
3. ¿Sintaxis installer debe usar provctl?

### Fase 2: Conectar

Si respuestas son SÍ:
1. Extender `catalog.rs` para exportar formato que provctl entienda
2. Integrar lectura de catalog en provctl CLI
3. Agregar soporte en syntaxis installer para detectar/usar provctl

### Fase 3: Validar

Tests de integración:
```bash
# Generar config desde catalog
provctl config --from-catalog syntaxis-dev

# Validar configuración
provctl config validate

# Aplicar y monitorear
provctl config apply
provctl status --all
```

---

## 📝 Resumen

**El problema REAL es**:

> Tenemos dos herramientas potentes (project-provisioning y provctl) pero desconectadas. El catalog TOML podría ser el puente pero:
>
> 1. ❌ No está claro cuál es su propósito
> 2. ❌ provctl no lo consume
> 3. ❌ syntaxis installer no sabe de él
> 4. ❌ No hay "fuente de verdad" única

**La solución REAL requiere**:

> Decidir si el catalog es "fuente de verdad" y si es así:
>
> 1. ✅ Conectar project-provisioning → catalog
> 2. ✅ Conectar provctl → catalog
> 3. ✅ Conectar syntaxis installer → catalog
> 4. ✅ Crear "presets" como combinaciones de servicios

**Lo que NO es el problema**:
- ❌ KCL vs TOML
- ❌ REST API para catalog (puede ser util pero no es el problema)
- ❌ Multi-lenguaje support (util pero no core)
- ❌ Recompilación (no ocurre)

---

**PRÓXIMA DECISIÓN**: ¿El catalog TOML es la fuente de verdad para todo, o solo documentación?
