feat(matilda): matilda-apply — puente del plan a la ejecución

Traduce un Plan de reconciliación a ApplySteps concretos: por cada
acción, los archivos a escribir en el servidor y los comandos a
correr. Contenedores → docker rm/run; vhosts → archivo nginx +
reload; hosts → sin pasos (son destino de conexión, no algo a
aplicar). steps_to_script() emite un script bash único con heredocs.

Sigue agnóstico de transporte — ejecutar los pasos (local, SSH o vía
matilda-ghost) es la capa de I/O. La demo CLI ahora imprime el script.

6 tests; matilda llega de la declaración al script ejecutable.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-20 20:18:20 +00:00
parent 22a0ae8c58
commit 5b9d8107fc
7 changed files with 249 additions and 4 deletions
+6 -4
View File
@@ -12,6 +12,7 @@ reconcilia el estado actual con el deseado.
| `matilda-core` | lib | Modelo: `Host`, `Container`, `VHost`, `Inventory` |
| `matilda-config` | lib | Renderizado: `Container` → docker-compose / `docker run`; `VHost` → nginx |
| `matilda-plan` | lib | Reconciliación: `plan(actual, deseado)` → lista ordenada de `Action`s |
| `matilda-apply` | lib | Puente plan→ejecución: `Action`s → `ApplyStep`s (archivos + comandos) y script de shell |
App: `apps/matilda` — demo CLI (`cargo run -p matilda`).
@@ -36,13 +37,14 @@ App: `apps/matilda` — demo CLI (`cargo run -p matilda`).
## Estado
`core` + `config` + `plan` implementados y verdes (29 tests) + demo CLI.
`core` + `config` + `plan` + `apply` implementados y verdes (35 tests) +
demo CLI. La cadena pura ya llega de la declaración al script de shell
concreto listo para correr en el servidor.
**Pendiente** (la capa de I/O, ~7 sub-crates del plan original):
**Pendiente** (la capa de I/O):
| crate pendiente | rol |
| ----------------- | ------------------------------------------------ |
| `matilda-linker` | transporte SSH (sobre `transport-ssh-multiplex`) |
| `matilda-ghost` | agente remoto que aplica el plan en el servidor |
| `matilda-docker` | ejecución real de Docker vía Linker/Ghost |
| `matilda-ghost` | agente remoto que ejecuta los `ApplyStep`s |
| `matilda-app` | frontend GPUI |