syntaxis/docs/provision/summary-correct-final.md
Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

9.8 KiB

RESUMEN FINAL - Arquitectura Correcta Implementada

Fecha: 2025-11-20 Estado: Documentación Completa y Validada Basado en: Análisis ultrathink + detalles reales del TOML existente


🎯 La Solución Correcta

Problema: Syntaxis necesita una forma declarativa de describir sus servicios, presets y requisitos.

Solución: Módulos KCL modular en syntaxis/configs/*.k

  • Única fuente de verdad
  • Validación nativa en KCL (compile-time)
  • Defaults inteligentes y herencia
  • Generación ON-DEMAND (kcl run → YAML/JSON en stdout)
  • SIN archivos generados/guardados (evita doble verdad)
  • Templates Tera para adaptación a provisioning/provctl/installer
  • NuShell scripts para export on-demand

📁 9 Archivos a Crear

KCL Modules (5 archivos)

# Archivo Ubicación Contenido
1 schemas.k syntaxis/configs/ 6 schemas: Service, Database, Cache, Preset, Deployment + validación nativa
2 defaults.k syntaxis/configs/ 6 servicios, 3 BDs, 1 caché, 4 presets (basados en services-catalog.toml)
3 services.k syntaxis/configs/ Referencia a defaults (permitir personalización futura)
4 presets.k syntaxis/configs/ Presets personalizables (local/dev/staging/prod)
5 deployment.k syntaxis/configs/ Declaración principal + exports

Resultado: 5 módulos KCL que definen completamente syntaxis

Tera Templates (3 archivos)

# Archivo Ubicación Propósito
6 provisioning-config.j2 syntaxis/templates/ Genera config para provisioning
7 provctl-config.j2 syntaxis/templates/ Genera TOML para provctl
8 installer-settings.j2 syntaxis/templates/ Genera JSON para installer interactivo

Resultado: 3 templates para adaptar KCL a diferentes consumidores

NuShell Script (1 archivo)

# Archivo Ubicación Propósito
9 export-config.nu syntaxis/scripts/ On-demand export KCL → YAML/JSON

Resultado: 1 script para exportación ephemeral (no almacenada)


🔑 Características Principales

1. Validación Nativa en KCL

schema Service:
    name: str
    type: "cli" | "tui" | "server" | "web" | "database" | "messaging"
    port?: int

    # Validación compile-time
    check: port is not None if type in ["server", "web", "database"]
    check: 1 <= port <= 65535 if port is not None

Ventaja: Errores detectados en compilación, no en runtime.


2. Defaults Inteligentes

default_services: {str: schemas.Service} = {
    cli = schemas.Service {
        name = "syntaxis-cli"
        display_name = "syntaxis CLI"
        description = "..."
        type = "cli"
        enabled = True
        platform_support = ["linux", "macos", "windows"]
        min_memory_mb = 64
        # ... 15+ campos con valores por defecto
    }
    # ... más servicios
}

Ventaja: No repetir defaults en TOML/YAML. Una sola verdad.


3. Herencia de Presets

# defaults.k define base_presets
# presets.k puede refinar
presets: {str: schemas.Preset} = {
    dev = defaults.base_presets.dev {
        # Override específicos si es necesario
    }
}

Ventaja: Presets derivados de base, mantenibles, componibles.


4. Generación On-Demand

# NO se generan archivos guardados:
kcl run syntaxis/configs/deployment.k  # → JSON en stdout
nu scripts/export-config.nu yaml       # → YAML en stdout

# Resultado: ephemeral (temporal), no en repo
# La verdad declarada = syntaxis/configs/*.k

Ventaja: Un solo lugar a mantener. Sin sincronización.


5. Consumo Adaptativo

provisioning:
    Lee: syntaxis/configs/*.k directamente
    Valida: Contra esquemas provisioning
    Genera: Config provisioning-específica

provctl:
    Llama: NuShell script (kcl run)
    Obtiene: YAML (temporal)
    Usa: Tera template para adaptar
    Genera: Config provctl (temporal, no guardado)

syntaxis-installer:
    Lee: syntaxis/configs/deployment.k
    Ofrece: Presets interactivos
    Pregunta: Parámetros específicos
    Usa: Tera templates para settings
    Genera: Config adaptada a elección del user

Ventaja: Cada herramienta se adapta, sin cambios a syntaxis.


📊 Servicios Reales (del TOML existente)

Los 6 servicios están basados en detalles reales del services-catalog.toml:

1. syntaxis-cli

  • Type: cli
  • Enabled by default: True
  • Min Memory: 64 MB
  • Database: Required (sqlite, surrealdb)
  • Config location: ~/.config/syntaxis

2. syntaxis-tui

  • Type: tui
  • Min Memory: 128 MB
  • Requires: syntaxis-cli
  • Platforms: linux, macos (no windows)
  • Config location: ~/.config/syntaxis

3. syntaxis-api

  • Type: server
  • Port: 3000
  • Health check: GET /health (200)
  • Min Memory: 256 MB
  • Background service:
  • Database: Required (sqlite, surrealdb)

4. syntaxis-dashboard

  • Type: web
  • Port: 8080
  • Requires: syntaxis-api
  • Health check: GET / (200)
  • Min Memory: 128 MB
  • Background service:

5. surrealdb

  • Type: database
  • Port: 8000
  • Health check: GET / (200)
  • Min Memory: 256 MB
  • Platforms: linux, macos
  • Background service:

6. nats

  • Type: messaging
  • Port: 4222
  • Health check: GET /healthz@8222 (200)
  • Min Memory: 256 MB
  • Platforms: linux, macos
  • Background service:

🎬 Presets Reales (de patterns en TOML)

Local: CLI Only

Services: [cli]
Manager: manual
Use cases: CI/CD, Headless servers

Dev: Development with API

Services: [cli, tui, api, dashboard, surrealdb]
Manager: provctl
Database: sqlite
Cache: disabled
Use cases: Team development, API testing, Dashboard dev

Staging: Multi-machine

Services: [cli, api, dashboard, surrealdb, nats]
Manager: provisioning
Database: postgres
Cache: enabled (redis)
Use cases: Integration testing, Load testing

Production: Minimal

Services: [api, surrealdb, nats]
Manager: provisioning
Database: postgres
Cache: enabled (redis)
Use cases: Kubernetes, Docker, Cloud

💡 Cómo Funciona en Práctica

Scenario 1: Developer Local (provisioning no disponible)

$ syntaxis-installer --preset dev

✅ Detecta: provctl disponible
✅ Lee: syntaxis/configs/deployment.k
✅ Pregunta: "¿Base de datos? [sqlite/postgres]"

User responde: sqlite

✅ Ejecuta:
   $ kcl run syntaxis/configs/deployment.k > /tmp/deployment.json
   $ tera --template provisioning-config.j2 \
           --input /tmp/deployment.json \
           --values database_type=sqlite \
           > /tmp/provctl-config.toml

   $ provctl config apply /tmp/provctl-config.toml
   $ rm /tmp/*  # No guardar temporales

✅ Resultado: Servicios dev corriendo localmente vía provctl

Clave: Configuración generada on-demand, no almacenada.


Scenario 2: Workspace con provisioning

# En provisioning/kcl/workspace.k

import /path/to/syntaxis/configs/deployment as sx

# Usar declaración KCL de syntaxis
syntaxis_config = sx.deployment

# provisioning valida y orquesta
# (Lee KCL directamente, sin conversión)

# Resultado: syntaxis integrada en infra como proyecto más

Clave: provisioning lee KCL directamente, sin cambios.


Scenario 3: NuShell Integration

# Exportar cuando algo lo necesita:

def export-syntaxis [format: string = "yaml"] {
    kcl run syntaxis/configs/deployment.k --format json \
        | from json | to $format
}

# Uso:
export-syntaxis yaml > /tmp/deployment.yaml  # Temporal
export-syntaxis json | to yaml               # Pipe directo

Clave: Export en stdout, no archivos persistentes.


Por Qué Es Correcto

Aspecto TOML compilado KCL Modular
Fuente de verdad Dispersa, confusa KCL, única, clara
Validación TOML sin validación KCL compile-time
Defaults Repetidos en TOML Herencia en KCL
Herencia No existe Native en schemas
Generación Almacenada (ruido) On-demand (ephemeral)
Mantenimiento Múltiples archivos Un main (deployment.k)
Adaptación Fija Parametrizada
Reutilización Limitada Modular, importable

🚀 Próximos Pasos

  1. Crear 5 módulos KCL (Fase 1)

    • Seguir IMPLEMENTATION_CORRECT.md, Pasos 1.1-1.5
    • Validar compilación de cada uno
  2. Crear 3 templates Tera (Fase 2)

    • Seguir IMPLEMENTATION_CORRECT.md, Pasos 2.1-2.3
    • Validar render
  3. Crear 1 script NuShell (Fase 3)

    • Seguir IMPLEMENTATION_CORRECT.md, Paso 3.1
    • Validar export
  4. Integrar con syntaxis-installer (Fase 4)

    • Cargar deployment.k
    • Ofrecer presets
    • Ejecutar en modo dev/prod
  5. Integrar con provisioning (Fase 5, si existe workspace)

    • Importar deployment.k
    • Validar contra esquemas
    • Orquestar

📚 Documentos de Referencia


🎓 Conceptos Clave

KCL como Lenguaje Declarativo

  • Type-safe (no JSON)
  • Validación nativa
  • Schemas con herencia
  • Templates Tera para adaptación

Modularidad

  • Imports entre módulos
  • Reutilización de schemas
  • Composición de presets

On-Demand Generation

  • No almacenar outputs
  • Mantener única fuente de verdad
  • Adaptar per-consumidor

Consumo Adaptativo

  • provisioning: KCL directo
  • provctl: YAML via NuShell
  • installer: parametrizado
  • Cada uno adapta sin cambios

Arquitectura validada. Lista para implementar.

Lee IMPLEMENTATION_CORRECT.md y comienza a crear los 9 archivos.