feat(matilda): ghost + linker + CLI — el ciclo completo de aplicación

matilda-ghost: el agente que ejecuta los ApplySteps en la máquina
destino — escribe archivos, corre comandos, reporta paso a paso;
semántica set -e (se detiene en el primer error). dry_run previsualiza
sin tocar nada. 5 tests.

matilda-linker: aplica los pasos en un host remoto por SSH sobre
brahman-ssh-multiplex; produce el mismo ApplyReport que el ghost local.

apps/matilda: deja de ser una demo hardcoded — ahora es una CLI real:
  matilda example | plan | script | apply  (local · --dry-run · --host)
Carga el inventario de un JSON, reconcilia y aplica.

matilda: 6 crates + CLI, ~42 tests. La cadena va de la declaración
a la aplicación local/remota.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-20 20:27:28 +00:00
parent 5b9d8107fc
commit df8f92fbb0
11 changed files with 683 additions and 86 deletions
+68 -4
View File
@@ -855,10 +855,8 @@
-p sandokan-lifecycle -p arje-incarnate
# Fase B — orquestador + discovery
cargo test -p sandokan-core -p sandokan-local -p sandokan-daemon -p
sandokan \
-p brahman-dht -p brahman-card-discovery -p
brahman-ssh-multiplex
cargo test -p sandokan-core -p sandokan-local -p sandokan-daemon -p sandokan \
-p brahman-dht -p brahman-card-discovery -p brahman-ssh-multiplex
# Fase F — pineal (6 charts)
cargo test -p pineal-render -p pineal-export -p pineal-heatmap \
@@ -897,3 +895,69 @@
Lo construido — 6 módulos, 16 crates nuevos
┌───────────┬───────────────────────────────┬───────┬────────────────────────────────┐
│ módulo │ crates │ tests │ estado │
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
│ dominium │ render-plan, canvas-gpui, app │ 37 │ ✅ completo │
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
│ verbo │ verbo-daemon │ 8 │ ✅ daemon entre-procesos │
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
│ fana │ render-plan, editor-gpui, app │ 12 │ ✅ editor DAG (prioridad alta) │
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
│ agorapura │ core, graph, app │ 22 │ ✅ identidad federada │
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
│ badu │ core, gravity, app │ 29 │ núcleo + demo │
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
│ takiy │ takiy-core │ 24 │ núcleo de teoría musical │
└───────────┴───────────────────────────────┴───────┴────────────────────────────────┘
132 tests nuevos, todos verdes. cargo check --workspace verde en cada commit. 14 commits pusheados.
Para que verifiques tú (apps GPUI — no las puedo ver)
cargo run -p dominium # simulador isométrico vivo
cargo run -p fana # editor DAG — «Mutar raíz» dispara la onda de choque
cargo run -p shuma-shell # el shell de 3 zonas
Ya verifiqué yo (CLI, corren bien)
cargo run -p agorapura # Venezuela atestigua a Yumaira; firma falsa rechazada; veredictos por política
cargo run -p badu # cuaderno: grafo de enlaces + clústeres por gravedad semántica
Verificación
Apps GPUI — necesito que las veas tú:
cargo run -p dominium # simulador isométrico vivo
cargo run -p fana # editor DAG — «Mutar raíz» dispara la onda de choque
cargo run -p shuma-shell # el shell de 3 zonas
Demos CLI — ya las verifiqué yo, corren bien:
cargo run -p agorapura # Venezuela atestigua a Yumaira; veredictos por política
cargo run -p badu # cuaderno: grafo de enlaces + clústeres por gravedad
cargo run -p matilda # inventario → docker-compose + nginx + plan de reconciliación
cargo run -p yachay # notebook: orden de ejecución + digest cambia al editar
matilda — el puente plan→ejecución
Avancé el módulo de server admin con matilda-apply: traduce el Plan de reconciliación a pasos concretos —los archivos a escribir y los comandos a
correr en el servidor— y a un script bash listo para ejecutar. cargo run -p matilda ahora lo imprime:
# crear contenedor «api»
docker run -d --name api --restart unless-stopped -p 9000:9000 ...
# actualizar contenedor «web»
docker rm -f web
docker run -d --name web ...
# crear vhost «api.jlsoltech.com»
cat > /etc/nginx/sites-enabled/api.jlsoltech.com.conf <<'MATILDA_EOF'
server { listen 443 ssl; ... }
MATILDA_EOF
nginx -t && nginx -s reload