# 📦 Documentación de Provisioning - Guía Limpia **Última actualización**: 2025-11-20 **Estado**: Análisis correcto, solución lista --- ## 🎯 El Problema ``` Dockerfile / docker-compose son INSUFICIENTES porque: ❌ No definen CÓMO GESTIONAR servicios (systemd, provctl) ❌ No definen CÓMO VALIDAR salud ❌ No definen CÓMO ORQUESTAR múltiples máquinas ❌ No integran con PROVISIONING ❌ No escalan a diferentes contextos (local/dev/prod) ❌ No declaran requisitos de INFRA ``` ## ✅ La Solución: Tres Capas Coherentes ### **CAPA 1: TaskService en provisioning** (FUENTE DE VERDAD) ``` /provisioning/extensions/taskservs/development/syntaxis/ ├── kcl/ │ ├── syntaxis.k ← Schema (como n8n.k, postgres.k) │ └── dependencies.k ← Requisitos del sistema ├── default/ │ ├── install-syntaxis.sh ← Script de instalación │ └── env-syntaxis.j2 ← Template de variables └── examples/ ├── syntaxis-dev.k ← Config para desarrollo └── syntaxis-prod.k ← Config para producción ``` **Define**: QUÉ es syntaxis, cómo se estructura, qué requisitos tiene **Ejemplo**: Como `/provisioning/extensions/taskservs/development/n8n/` existente --- ### **CAPA 2: Config en provctl** (GESTIÓN LOCAL) ``` /provctl/examples/stage1-extended-definitions/ ├── syntaxis-local-dev.toml ← Para desarrollo local ├── syntaxis-prod.toml ← Para producción └── syntaxis-staging.toml ← Para staging ``` **Define**: CÓMO ejecutar syntaxis (systemd, health checks, ports, env) **Ejemplo**: Como `/provctl/examples/minimal-app.toml` existente --- ### **CAPA 3: Presets en syntaxis** (UX DEL DEVELOPER) ``` syntaxis/configs/ ├── deployment-presets.kcl ← LOCAL / DEV / STAGING / PRODUCTION └── (NO MÁS TOML COMPILADO) ``` **Define**: Qué servicios en cada contexto **Resultado**: `syntaxis-installer --preset dev` detecta automáticamente provctl/provisioning --- ## 🔗 Cómo Se Conectan ``` Developer elige preset ↓ syntaxis installer lee deployment-presets.kcl ├─ local → CLI solamente (manual) ├─ dev → provctl config (local automático) ├─ staging → provisioning (infra escalable) └─ prod → provisioning + HA Si "dev" (provctl): ├─ Detecta provctl disponible ├─ Lee provisioning taskserv (syntaxis.k) ├─ Genera config provctl (syntaxis-local-dev.toml) └─ Inicia servicios con systemd/launchd Si "prod" (provisioning): ├─ syntaxis es un taskserv importable ├─ provisioning lo orquesta como su inversión lo permite └─ Resultado: Full stack enterprise ``` --- ## 📊 Comparación | Aspecto | Antes (TOML compilado) | Después (3 Capas) | |---------|---|---| | **Definición** | TOML → catalog.rs → ingestionable | KCL taskserv (como n8n) | | **Gestión local** | ❓ Desconocido | provctl TOML (como minimal-app) | | **Presets** | ❌ No existen | ✅ KCL en syntaxis | | **Cambios** | Recompilación continua | Solo guardar archivo | | **Consumible por** | provisioning tools | provisioning, provctl, installer | | **DX** | "¿Qué es este TOML?" | "Elige preset: dev/prod ✅" | --- ## 📝 Documentos en Este Directorio ### Lectura Necesaria 1. **[CURRENT_STATE_ANALYSIS.md](CURRENT_STATE_ANALYSIS.md)** - Análisis de qué existe hoy - Qué no existe - Hallazgos críticos 2. **[SOLUTION_ARCHITECTURE_CORRECT.md](SOLUTION_ARCHITECTURE_CORRECT.md)** - Capa 1: TaskService (KCL schema) - Capa 2: Config provctl (TOML) - Capa 3: Presets (KCL) - Ejemplos reales basados en n8n y otros 3. **[PROBLEM_STATEMENT_CORRECT.md](PROBLEM_STATEMENT_CORRECT.md)** - Por qué Docker/compose no es suficiente - Qué define cada capa - Cómo se conectan ### Documentos Descartables - `ARCHITECTURE_REVISION.md` ❌ (problema hipotético incorrecto) - `KCL_REST_API_DESIGN.md` ❌ (solución para problema incorrecto) - `MULTI_LAYER_VALIDATION.md` ❌ (enfoque incorrecto) - `VALIDATION_REGISTRY_NUSHELL.md` ❌ (enfoque incorrecto) - `THE_REAL_PROBLEM.md` ❌ (análisis parcial) --- ## 🚀 Próximos Pasos ### Paso 1: Crear TaskService en provisioning ```bash mkdir -p provisioning/extensions/taskservs/development/syntaxis/kcl mkdir -p provisioning/extensions/taskservs/development/syntaxis/default mkdir -p provisioning/extensions/taskservs/development/syntaxis/examples ``` Copiar estructura de n8n y adaptarla ### Paso 2: Crear config provctl ```bash provctl/examples/stage1-extended-definitions/syntaxis-local-dev.toml ``` Basado en minimal-app.toml ### Paso 3: Crear presets en syntaxis ```bash syntaxis/configs/deployment-presets.kcl ``` Define: local/dev/staging/production ### Paso 4: Integrar con syntaxis installer Extender installer para: - Leer presets - Detectar provisioning/provctl - Aplicar configuración automática --- ## ✨ Beneficio Final ``` Developer: "Instala syntaxis" ↓ syntaxis-installer "¿Cómo?: 1. local (CLI solamente) 2. dev (Full stack local) 3. staging (Multi-máquina) 4. production (HA)" Developer elige "dev" ↓ Installer detecta provctl ↓ Auto-configura servicios ↓ ✅ "Listo para usar" ``` Sin Docker/compose requirements adicionales. Sin TOML compilado ingestionable. Sin recompilación. --- ## 📌 Decisión Crítica **¿Es el archivo declarativo KCL la fuente de verdad?** ✅ **SÍ** - Así como n8n.k lo es para n8n, postgres.k lo es para PostgreSQL **¿Provctl puede leerlo?** ✅ **SÍ** - Se genera TOML consumible por provctl (como minimal-app.toml) **¿Provisioning puede usarlo?** ✅ **SÍ** - Es un taskserv, se integra como cualquier otro (postgres, redis, kubernetes) **¿Escala a otros proyectos?** ✅ **SÍ** - Cada proyecto puede ser un taskserv externo en provisioning