SPLENT cierra el gap entre la especificación formal de variabilidad (un modelo UVL) y el software real que debe ejecutarse. El modelo UVL deja de ser un artefacto pasivo y pasa a gobernar la construcción del producto: cada configuración se valida formalmente antes de compilar una sola línea de código.
arquitectura
- Framework — runtime en Python que descubre, compone y orquesta features dentro de una app Flask. Lee el modelo UVL al arrancar, resuelve el orden topológico respetando cross-tree constraints, y registra blueprints, modelos y hooks.
- CLI — comandos organizados por dominio:
feature:*,product:*,uvl:*,spl:*,db:*,cache:*, health checks (doctor,check:*), testing, etc. - Cache — almacenamiento local de versiones de features, namespace-aware, con soporte offline y reproducibilidad.
features como paquetes
Cada feature es un paquete Python independiente bajo el namespace splent_io,
distribuido vía PyPI o GitHub, con su propio ciclo de vida (absent → cached →
declared → installed → migrated → active/disabled), sus rutas, modelos,
migraciones Alembic, templates, assets frontend, tests y (opcionalmente)
servicios Docker Compose.
integración con UVLHub
La relación es bidireccional: el modelo UVL publicado en UVLRepo recibe un DOI, y
pyproject.toml lo referencia. splent uvl:fetch descarga el modelo canónico, y
product:derive valida la configuración contra él con Flamapy antes de construir.
Cada producto desplegado es trazable hasta el DOI exacto que gobernó su derivación.