feat(matilda): detección de drift con docker inspect
1
2● Reporte técnico — Monorepo Brahman
3
4 Estado al 2026-05-19 · 126 crates · ~78,000 LOC · cargo check --workspace verde
5
6 ---
7 0 · Panorama
8
9 Sistema operativo fractal en Rust: cada cómputo se modela como Card, los módulos
10 se acoplan sólo vía contratos serializables (brahman-card), el aislamiento es
11 uniforme (ente-incarnate), y el routing es un service-locator de tipos
12 (brahman-broker). El monorepo se reorganizó hoy en 6 capas físicas:
13
14 crates/
15 ├── protocol/ 9 crates · contratos + routing
16 ├── init/ 5 crates · PID 1 + encarnación Linux
17 ├── runtime/ 5 crates · bus + cas + wasm + brain
18 ├── compat/ 14 crates · shims D-Bus systemd
19 ├── modules/ 62 crates · funcionalidad de dominio
20 └── apps/ 23 crates · binarios finales
21
22 ---
23 1 · Capa protocol/ — 6,260 LOC · ★★★★☆
24
25 ┌─────────────────┬──────┬──────┬──────┬──────────────────────────────────┐
26 │ crate │ LOC │ test │ TODO │ rol │
27 │ │ │ s │ s │ │
28 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
29 │ brahman-card │ 1,29 │ sí │ 5 │ Card { soma, payload, flow, │
30 │ │ 0 │ │ │ permissions, ... } │
31 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
32 │ brahman-card-wi │ 165 │ sí │ 0 │ Extracción WIT desde componentes │
33 │ t │ │ │ │ WASM │
34 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
35 │ brahman-cards │ 643 │ sí │ 2 │ Templates Nickel + helpers │
36 │ │ │ │ │ consumer/producer/broker │
37 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
38 │ brahman-handsha │ 2,94 │ sí │ 10 │ Init↔módulo: Hello/Ping/ListSess │
39 │ ke │ 2 │ │ │ ions/ListMatches │
40 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
41 │ brahman-broker │ 995 │ sí │ 2 │ Matching híbrido (Exact + │
42 │ │ │ │ │ Structural) │
43 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
44 │ brahman-admin │ 225 │ no │ 0 │ Socket admin para snapshots │
45 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
46 │ brahman-sidecar │ 565 │ sí │ 0 │ spawn(card) para apps │
47 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
48 │ brahman-net │ 423 │ no │ 0 │ libp2p │
49 │ │ │ │ │ (TCP+noise+yamux+kad+identify) │
50 ├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
51 │ ente-card │ — │ — │ — │ Alias legacy (re-export) │
52 └─────────────────┴──────┴──────┴──────┴──────────────────────────────────┘
53
54 Hecho. Handshake fase 1–3 (libp2p stream → DHT discovery → trust Ed25519).
55 Broker emparejando con dos estrategias. Sidecar reusable por todas las apps.
56 Allowlist/denylist con hot reload <250ms.
57
58 Pendiente. Fase 4 trust: capabilities revocables, beyond-peer (delegación),
59 métricas exportables. Tests faltan en brahman-admin (lo único sin cobertura).
60
61 ---
62 2 · Capa init/ — ~3,600 LOC · ★★★★☆
63
64 ┌────────────────┬──────┬────────────────────────────────────────────────────┐
65 │ crate │ tipo │ rol │
66 ├────────────────┼──────┼────────────────────────────────────────────────────┤
67 │ ente-zero │ bin │ PID 1: reap loop + bus + handshake server + │
68 │ │ │ brahman-net opc. │
69 ├────────────────┼──────┼────────────────────────────────────────────────────┤
70 │ ente-kernel │ lib │ bootstrap_kernel_surface, subreaper, │
71 │ │ │ SIGCHLD/uevent streams │
72 ├────────────────┼──────┼────────────────────────────────────────────────────┤
73 │ ente-soma │ lib │ Wrapper ~30 LOC sobre ente-incarnate (compat API │
74 │ │ │ histórica) │
75 ├────────────────┼──────┼────────────────────────────────────────────────────┤
76 │ ente-incarnate │ lib │ clone(2) + namespaces + cgroup + rlimits + cpu + │
77 │ │ │ child_pre_exec │
78 ├────────────────┼──────┼────────────────────────────────────────────────────┤
79 │ ente-snapshot │ lib │ FractalSnapshot JSON (v1–v4 con forward-compat) │
80 └────────────────┴──────┴────────────────────────────────────────────────────┘
81
82 Hecho. Bootea bare metal + QEMU + initramfs (documentado en docs/arje-boot.md).
83 ente-incarnate con builder pattern, ChildStdio + ChildPreExec declarativo,
84 async-signal-safe. Snapshot v4 con replay buffer persistido + live pipelines.
85
86 Pendiente. Cobertura de tests sobre snapshot restore con stale fds. Validación
87 de re-encarnación tras restore.
88
89 ---
90 3 · Capa runtime/ — ~3,400 LOC · ★★★☆☆
91
92 ┌────────────┬───────────────────────────────────────────────────────┬───────┐
93 │ crate │ rol │ TODOs │
94 ├────────────┼───────────────────────────────────────────────────────┼───────┤
95 │ ente-bus │ Unix SOCK_STREAM + postcard. │ 1 │
96 │ │ Announce/Invoke/ListEntes │ │
97 ├────────────┼───────────────────────────────────────────────────────┼───────┤
98 │ ente-cas │ SHA-256 content-addressed: blobs Wasm + audit log │ 0 │
99 ├────────────┼───────────────────────────────────────────────────────┼───────┤
100 │ ente-wasm │ Encarna Payload::Wasm vía wasmi en thread dedicado │ 1 │
101 ├────────────┼───────────────────────────────────────────────────────┼───────┤
102 │ ente-brain │ Rule engine + observer estadístico + audit chain │ 11 │
103 ├────────────┼───────────────────────────────────────────────────────┼───────┤
104 │ ente-echo │ Ente prueba — Capability::Endpoint(echo) │ 1 │
105 └────────────┴───────────────────────────────────────────────────────┴───────┘
106
107 Hecho. Bus + CAS + wasm operativos. SO_PEERCRED para identidad. Audit chain
108 hashea cada evento del bus al CAS.
109
110 Pendiente crítico. ente-brain concentra el 78% de la deuda técnica de esta capa:
111 el rule engine declarativo está parcialmente implementado, falta el evaluador
112 completo de policies + observer cross-ente.
113
114 ---
115 4 · Capa compat/ — ~5,000 LOC · ★★★☆☆
116
117 14 shims D-Bus operativos como binarios standalone. Suficiente para que
118 desktop-file-utils, xdg-open, gnome-session, login managers y CLIs systemd-aware
119 no rompan al arrancar sobre ente-zero.
120
121 Hecho. Cada shim reclama un well-known name (org.freedesktop.X1), implementa la
122 interfaz mínima del ecosistema, loggea al audit de ente-brain.
123
124 Pendiente. Métodos avanzados — Inhibit/Sleep hooks en logind, SetVariable en
125 localed, MachineImage operations en machined. Necesarios para correr GNOME Shell
126 end-to-end sin parches.
127
128 ---
129 5 · modules/semantic_dht/ (minga) — 5,091 LOC · ★★★★☆
130
131 ┌─────────────┬───────┬──────────────────────────────────────────────┐
132 │ crate │ LOC │ rol │
133 ├─────────────┼───────┼──────────────────────────────────────────────┤
134 │ minga-core │ 3,085 │ Parser tree-sitter + α-hashing (5 lenguajes) │
135 ├─────────────┼───────┼──────────────────────────────────────────────┤
136 │ minga-p2p │ 1,105 │ libp2p kad + bootstrap + provider records │
137 ├─────────────┼───────┼──────────────────────────────────────────────┤
138 │ minga-store │ 425 │ Sled backend para índice local │
139 ├─────────────┼───────┼──────────────────────────────────────────────┤
140 │ minga-cli │ 474 │ CLI: index, search, peers, bootstrap │
141 ├─────────────┼───────┼──────────────────────────────────────────────┤
142 │ minga-vfs │ 2 │ STUB — Mount FUSE de mónadas remotas │
143 └─────────────┴───────┴──────────────────────────────────────────────┘
144
145 Hecho. α-hashing cubre Rust (let-else, if-let, or-patterns, let-chains), Python,
146 TypeScript, JavaScript, Go. Indexa repos reales. DHT publica + descubre via
147 kad. 15 TODOs en core (más patterns para edge cases).
148
149 Bloqueante para uso end-to-end. minga-vfs es stub de 2 LOC. Sin él no hay forma
150 de montar las mónadas indexadas como filesystem navegable.
151
152 ---
153 6 · modules/nahual/ (ex-yahweh) — 15,968 LOC · ★★★★★
154
155 Framework GPUI backbone del monorepo.
156
157 Libs (núcleo, 8 crates): core, theme, launcher, bus, meta-schema, meta-runtime,
158 providers/{fs,sqlite}. Tema persistente entre runs, MetaUi declarativa,
159 providers de datos.
160
161 Widgets (12 crates): tree, container_core, splitter, tabs, tiled, text_input,
162 meta-form, banner, card, stat-card, app-header, theme-switcher. Cada uno <500
163 LOC, reusable individualmente.
164
165 Hecho. Tests E2E con gpui::TestAppContext. nahual-shell define el patrón
166 estándar de explorer (sidebar+main+status+hot-reload). Consumido por 5 explorers
167 + cosmobiologia.
168
169 Pendiente. Mantenimiento. Documentar el patrón "explorer estándar" como guía de
170 extensión.
171
172 ---
173 7 · modules/pineal/ (ex-lapaloma) — ~3,900 LOC · ★★★☆☆
174
175 13 crates de data-viz con backends pluggables (CPU+GPUI, GPU stub, SVG export).
176
177 Funcionales (5 charts): core (878), render (386), cartesian (1397), financial
178 (688), stream (231), phosphor (312), export.
179
180 Stubs (<50 LOC c/u): polar, heatmap, treemap, flow, mesh.
181
182 Hecho. Trait Canvas agnóstico, RenderPlan con RenderCmd variants, backend GPUI
183 completo. Cartesian con axes + viewport + series. Financial con candlestick +
184 OHLC. Streaming a 60Hz con phosphor trail (alpha decay).
185
186 Pendiente. Cerrar los 5 stubs en orden polar → heatmap → treemap → flow → mesh.
187
188 ---
189 8 · modules/nakui/ — 7,063 LOC · ★★★★☆
190
191 ERP categórico: entidades = objetos, morfismos = operaciones de negocio.
192
193 Hecho. Schema declarativo Nickel (migrado de KCL). Event log con replay al
194 startup. Snapshot/compaction automático. Validación FieldKind cross-field. 6
195 módulos ERP estándar incluidos como ejemplos. CRUD completo + Action::Morphism
196 wired al pipeline.
197
198 Pendiente. Documentar el patrón de morfismos en Nickel como guía para extender
199 el ERP a dominios nuevos.
200
201 ---
202 9 · modules/akasha/ (ex-nouser) — 4,395 LOC · ★★★☆☆
203
204 ┌──────────────────┬───────┬────────────────────────────────────────────────┐
205 │ crate │ LOC │ rol │
206 ├──────────────────┼───────┼────────────────────────────────────────────────┤
207 │ akasha-core │ 2,215 │ Daemon: scanner FS + DB sled + cluster k-means │
208 ├──────────────────┼───────┼────────────────────────────────────────────────┤
209 │ akasha-card │ 709 │ Card del daemon + capabilities │
210 ├──────────────────┼───────┼────────────────────────────────────────────────┤
211 │ akasha-nous │ (lib) │ Protocolo Nous (JSON line-delimited) │
212 ├──────────────────┼───────┼────────────────────────────────────────────────┤
213 │ akasha-nous-mock │ (bin) │ Embeddings deterministas (testing) │
214 ├──────────────────┼───────┼────────────────────────────────────────────────┤
215 │ akasha-nous-real │ 642 │ Embeddings con fastembed + ort │
216 └──────────────────┴───────┴────────────────────────────────────────────────┘
217
218 Hecho. Pipeline scan+embed+cluster funcional. notify watcher con debounce +
219 re-publish al broker. Hidratación vía sled + path_hint. Centroid model
220 versionado. Cache de embeddings con write-through al CAS de arje.
221
222 Pendiente crítico. Tests sobre cluster.rs (k-means actual es naive). Manejo de
223 drift de embeddings cuando cambia el modelo subyacente.
224
225 ---
226 10 · modules/shuma/ (ex-shipote) — 6,907 LOC · ★★★★☆
227
228 ┌────────────────┬───────┬───────────────────────────────────────────────────┐
229 │ crate │ LOC │ rol │
230 ├────────────────┼───────┼───────────────────────────────────────────────────┤
231 │ shuma-core │ 3,518 │ WorkspaceManager + pipeline + persist + │
232 │ │ │ flow_channel │
233 ├────────────────┼───────┼───────────────────────────────────────────────────┤
234 │ shuma-card │ 655 │ WorkspaceSpec + PipelineSpec + ExitPolicy + │
235 │ │ │ DiscernPolicy │
236 ├────────────────┼───────┼───────────────────────────────────────────────────┤
237 │ shuma-protocol │ 444 │ Wire postcard length-prefixed │
238 ├────────────────┼───────┼───────────────────────────────────────────────────┤
239 │ shuma-discern │ 307 │ DiscernPipeline + MagicBytes/Card/Json/Toml/Utf8 │
240 │ │ │ probes │
241 └────────────────┴───────┴───────────────────────────────────────────────────┘
242
243 Hecho. 20 fases completadas (A→S, ver docs/changelog/shuma.md):
244 - A: 9 crates iniciales + smoke E2E
245 - B: pipelines con discern enrichment
246 - C: pipeline aislado con O_CLOEXEC + TTL + persistencia
247 - D: snapshot v2 + saved pipelines + log capture
248 - E: stderr separado + fan-out 1→N + tap→broker
249 - F: data plane vivo (FlowChannel con accept loop)
250 - G: replay buffer + templating + child_pre_exec declarativo
251 - H: stats memory+CPU + stop graceful + replay configurable
252 - I: memory.peak + pipeline stop selectivo + sparkline shell
253 - J: CPU% multi-core + pipeline --tail + replay por bytes
254 - K: cpu_cores + quota report + restart-on-failure
255 - L: quota enforcement + cgroup memory.max + pipeline restart
256 - M: backoff exponencial + quota breaches card + logs --follow
257 - N: drain shutdown + snapshot v3 live_pipelines + batched query
258 - O: collision detection sockets + stats history server-side
259 - P: throughput metering + stats history persistido + auth SO_PEERCRED
260 - Q: throughput card + rate-limit token-bucket + snapshot incremental
261 - R: health endpoint + audit log tracing + token bucket real
262 - S: audit log persistente + HTTP/JSON gateway
263
264 Pendiente. Auth en gateway (token, mTLS). Rotación de audit.log con N backups.
265 WIT contracts reales. shipote-shell click handler. Métricas Prometheus.
266
267 ---
268 11 · modules/gioser/ — 2,535 LOC · ★★★★★
269
270 5 crates agnósticos (geom, physics, palette, shaders, canvas-web) + cdylib
271 apps/gioser-web. Landing personal con chacana 3D + tilt físico al mouse + 4 tips
272 elementales en Markdown.
273
274 Hecho. Operativa. Build pipeline scripts/build-gioser-web.sh. Tests sobre
275 geom/physics/palette puros. 0 TODOs.
276
277 ---
278 12 · modules/pluma/ — 178 LOC · ★★★☆☆
279
280 ┌──────────────────┬─────┬───────────────────────────────────────┐
281 │ crate │ LOC │ rol │
282 ├──────────────────┼─────┼───────────────────────────────────────┤
283 │ pluma-md │ 90 │ Wrapper pulldown-cmark con AST simple │
284 ├──────────────────┼─────┼───────────────────────────────────────┤
285 │ pluma-reader-web │ 88 │ Reader DOM: fetch + inject + theming │
286 └──────────────────┴─────┴───────────────────────────────────────┘
287
288 Pendiente. AST con inline elements (links, emphasis) accesibles desde Rust. Sin
289 tests (todavía).
290
291 ---
292 13 · modules/vista/ — 530 LOC · ★★★★☆ (NUEVO HOY)
293
294 ┌────────────┬─────┬───────┬────────────────────────────────────────────┐
295 │ crate │ LOC │ tests │ rol │
296 ├────────────┼─────┼───────┼────────────────────────────────────────────┤
297 │ vista-core │ 175 │ 5/5 │ DeckState agnóstico + snap + drag decision │
298 ├────────────┼─────┼───────┼────────────────────────────────────────────┤
299 │ vista-web │ 355 │ — │ Binding DOM (PointerEvent → DeckState) │
300 └────────────┴─────┴───────┴────────────────────────────────────────────┘
301
302 Hecho hoy. Lógica de snap (umbral 8px + bias 1.3) y máquina de estados
303 (pointer_down/move/end → DragOutcome) extraída a core agnóstico. vista-web pasa
304 a binding fino. Reusable en backends no-web.
305
306 ---
307 14 · modules/barra/ — 280 LOC · ★★★★☆ (NUEVO HOY)
308
309 ┌────────────┬─────┬───────┬─────────────────────────────────────────────┐
310 │ crate │ LOC │ tests │ rol │
311 ├────────────┼─────┼───────┼─────────────────────────────────────────────┤
312 │ barra-core │ 90 │ 5/5 │ Task + render_html + sanitize + escape │
313 ├────────────┼─────┼───────┼─────────────────────────────────────────────┤
314 │ barra-web │ 190 │ — │ Mount sobre <ul> + click delegate + centers │
315 └────────────┴─────┴───────┴─────────────────────────────────────────────┘
316
317 Hecho hoy. Modelo Task + render HTML puro extraído a core. barra-web mantiene
318 mount/click/lookups DOM intrínsecos.
319
320 ---
321 15 · modules/cosmobiologia/ — 21,502 LOC · ★★★☆☆
322
323 Crate más grande del monorepo. 11 sub-crates.
324
325 ┌──────────────────────────────────┬────────┬─────────┬───────┐
326 │ crate │ LOC │ tests │ TODOs │
327 ├──────────────────────────────────┼────────┼─────────┼───────┤
328 │ cosmobiologia-canvas │ 2,850 │ no │ — │
329 ├──────────────────────────────────┼────────┼─────────┼───────┤
330 │ cosmobiologia-engine │ 2,687 │ sí │ 12 │
331 ├──────────────────────────────────┼────────┼─────────┼───────┤
332 │ cosmobiologia-tree │ 2,295 │ no │ — │
333 ├──────────────────────────────────┼────────┼─────────┼───────┤
334 │ cosmobiologia-render │ 1,474 │ sí │ — │
335 ├──────────────────────────────────┼────────┼─────────┼───────┤
336 │ cosmobiologia-panel │ 1,037 │ sí │ — │
337 ├──────────────────────────────────┼────────┼─────────┼───────┤
338 │ cosmobiologia-modules │ 955 │ — │ — │
339 ├──────────────────────────────────┼────────┼─────────┼───────┤
340 │ cosmobiologia-store │ 760 │ sí │ — │
341 ├──────────────────────────────────┼────────┼─────────┼───────┤
342 │ (resto: model, theme, card, web) │ ~1,000 │ parcial │ — │
343 └──────────────────────────────────┴────────┴─────────┴───────┘
344
345 Hecho. Render agnóstico (DrawCommand + compose_wheel) con dos backends: GPUI
346 nativo + WASM SVG. App standalone funcional. Server HTTP single-user con CRUD.
347 Cliente web demo SSR. Crate WASM con fallback inteligente. Compose wheel rico
348 (palette + dial 3D + spread + coord labels).
349
350 Pendiente (roadmap del proyecto):
351
352 ┌───────┬──────────────────────────────────┬─────────────────────────┐
353 │ # │ área │ crates afectados │
354 ├───────┼──────────────────────────────────┼─────────────────────────┤
355 │ 55-62 │ Sistema GR (8 tareas) │ engine + canvas + panel │
356 ├───────┼──────────────────────────────────┼─────────────────────────┤
357 │ 63 │ FFT armónico │ engine + modules │
358 ├───────┼──────────────────────────────────┼─────────────────────────┤
359 │ 64-65 │ Research bank (corpus + queries) │ store + engine │
360 ├───────┼──────────────────────────────────┼─────────────────────────┤
361 │ 66 │ 3D celestial sphere │ render + canvas │
362 ├───────┼──────────────────────────────────┼─────────────────────────┤
363 │ 67 │ Rectificador automático │ engine + modules │
364 └───────┴──────────────────────────────────┴─────────────────────────┘
365
366 ---
367 16 · apps/ — 23 binarios
368
369 ┌───────────────┬────────────────────────────────────────────────────────────┐
370 │ categoría │ apps │
371 ├───────────────┼────────────────────────────────────────────────────────────┤
372 │ Protocol │ brahman-broker-explorer, brahman-demo │
373 ├───────────────┼────────────────────────────────────────────────────────────┤
374 │ │ nahual-shell, nahual-file-explorer, │
375 │ Nahual suite │ nahual-database-explorer, nahual-text-viewer, │
376 │ │ nahual-image-viewer │
377 ├───────────────┼────────────────────────────────────────────────────────────┤
378 │ Akasha │ akasha-explorer │
379 ├───────────────┼────────────────────────────────────────────────────────────┤
380 │ Nakui │ nakui-ui, nakui-explorer │
381 ├───────────────┼────────────────────────────────────────────────────────────┤
382 │ Minga │ minga-explorer │
383 ├───────────────┼────────────────────────────────────────────────────────────┤
384 │ Shuma │ shuma-daemon, shuma-cli, shuma-gateway, shuma-shell │
385 ├───────────────┼────────────────────────────────────────────────────────────┤
386 │ Pineal demos │ pineal-demo, pineal-stream-demo, pineal-phosphor-demo, │
387 │ │ pineal-financial-demo │
388 ├───────────────┼────────────────────────────────────────────────────────────┤
389 │ Web │ gioser-web (cdylib) │
390 ├───────────────┼────────────────────────────────────────────────────────────┤
391 │ Cosmobiología │ cosmobiologia (GPUI), cosmobiologia-cli, │
392 │ │ cosmobiologia-server │
393 └───────────────┴────────────────────────────────────────────────────────────┘
394
395 ---
396 17 · Tooling y artefactos cross-cutting
397
398 scripts/
399 ├── reorg.py ← migración monorepo (hoy)
400 ├── split-changelog.py ← partición CHANGELOG (hoy)
401 ├── bootstrap-demo.sh ← escenario reproducible
402 ├── build-arje-initrd.sh ← initramfs CPIO+gzip musl-static
403 ├── build-gioser-web.sh ← WASM + wasm-bindgen
404 ├── install-arje-as-init.sh, uninstall-arje.sh
405 └── run-arje-qemu.sh
406
407 seeds/
408 ├── arje-minimal.card.json ← shell bare
409 ├── arje-host.card.json ← full host (13 sub-cards)
410 └── arje-prod.card.json ← 15 sub-cards prod (tmpfiles, binfmt, daemons,
411 getty)
412
413 docs/
414 ├── STATUS.md, ROADMAP.md ← global (hoy)
415 ├── arje-boot.md ← initrd + QEMU + bare metal
416 ├── arje-replace-systemd.md
417 └── changelog/ ← 7 buckets por proyecto (hoy)
418
419 ---
420 18 · Métricas agregadas
421
422 ┌───────────────────────┬────────────────────────────────────────────────────┐
423 │ dimensión │ valor │
424 ├───────────────────────┼────────────────────────────────────────────────────┤
425 │ Total crates │ 126 │
426 ├───────────────────────┼────────────────────────────────────────────────────┤
427 │ Binarios [[bin]] │ 35 │
428 ├───────────────────────┼────────────────────────────────────────────────────┤
429 │ Librerías │ 89 │
430 ├───────────────────────┼────────────────────────────────────────────────────┤
431 │ cdylib (WASM) │ 2 (gioser-web, cosmobiologia-web) │
432 ├───────────────────────┼────────────────────────────────────────────────────┤
433 │ LOC totales │ ~78,000 │
434 ├───────────────────────┼────────────────────────────────────────────────────┤
435 │ Crates con tests │ 65 / 126 (52%) — esperable, compat shims sin tests │
436 ├───────────────────────┼────────────────────────────────────────────────────┤
437 │ TODOs/FIXMEs/todo!() │ 155 total · 78% concentrado en 4 crates │
438 ├───────────────────────┼────────────────────────────────────────────────────┤
439 │ Cobertura cargo check │ 100% (workspace verde) │
440 └───────────────────────┴────────────────────────────────────────────────────┘
441
442 Concentración de deuda técnica:
443 - cosmobiologia-engine: 12 TODOs (sistema GR, harmonics)
444 - ente-brain: 11 TODOs (rule engine)
445 - brahman-handshake: 10 TODOs (trust fase 4)
446 - shuma-core: 14 TODOs (supervisión avanzada)
447 - Otros 65 crates: 108 TODOs distribuidos
448
449 ---
450 19 · Plan global a finalización
451
452 Orden topológico (bottom-up del stack), con dependencias declaradas.
453
454 Hito 1 · Cobertura crítica (semana 1-2)
455
456 Cierra los gaps donde el código existe pero no hay tests, antes de añadir
457 features sobre código no validado.
458
459 ┌───────────────────────────────────────────┬───────────────┬───────────────┐
460 │ tarea │ crate │ desbloquea │
461 ├───────────────────────────────────────────┼───────────────┼───────────────┤
462 │ Tests E2E sobre cosmobiologia-canvas │ cosmo-canvas │ confianza UI │
463 ├───────────────────────────────────────────┼───────────────┼───────────────┤
464 │ Tests E2E sobre cosmobiologia-tree │ cosmo-tree │ confianza UI │
465 ├───────────────────────────────────────────┼───────────────┼───────────────┤
466 │ Tests sobre akasha-core::cluster │ akasha-core │ drift │
467 │ (k-means) │ │ handling │
468 ├───────────────────────────────────────────┼───────────────┼───────────────┤
469 │ Tests FractalSnapshot restore con stale │ ente-snapshot │ resiliencia │
470 │ fds │ │ │
471 ├───────────────────────────────────────────┼───────────────┼───────────────┤
472 │ Tests sobre brahman-admin (único protocol │ brahman-admin │ cierre suite │
473 │ sin tests) │ │ │
474 └───────────────────────────────────────────┴───────────────┴───────────────┘
475
476 Salida: ≥1 test por crate sin cobertura actual + matriz de panics.
477
478 Hito 2 · Cerrar stubs bloqueantes (semana 2-3)
479
480 ┌────────────────┬───────────────────┬───────────────────────────────┐
481 │ stub │ LOC actual → meta │ impacto │
482 ├────────────────┼───────────────────┼───────────────────────────────┤
483 │ minga-vfs │ 2 → ~600 │ Mount FUSE de mónadas remotas │
484 ├────────────────┼───────────────────┼───────────────────────────────┤
485 │ pineal-polar │ <50 → ~300 │ Coord polar funcional │
486 ├────────────────┼───────────────────┼───────────────────────────────┤
487 │ pineal-heatmap │ <50 → ~250 │ Grid 2D color-mapped │
488 ├────────────────┼───────────────────┼───────────────────────────────┤
489 │ pineal-treemap │ <50 → ~300 │ Rectangular treemap │
490 ├────────────────┼───────────────────┼───────────────────────────────┤
491 │ pineal-flow │ <50 → ~400 │ Sankey diagrams │
492 ├────────────────┼───────────────────┼───────────────────────────────┤
493 │ pineal-mesh │ <50 → ~250 │ Triangle mesh + barycentric │
494 └────────────────┴───────────────────┴───────────────────────────────┘
495
496 Bloqueante de minga-vfs: estabilizar tras Hito 1 (sin tests es prematuro).
497
498 Hito 3 · Cerrar TODOs concentrados (semana 3-5, paralelo)
499
500 Tres tracks independientes, paralelizables:
501
502 Track A — Brain rule engine (ente-brain, 11 TODOs)
503 - Evaluador completo de policies declarativas
504 - Observer estadístico cross-ente (Bayesian update)
505 - Reglas como Cards (recursión: policies son módulos)
506
507 Track B — Shuma supervisión (shuma-core, 14 TODOs)
508 - Auth gateway (token via env / mTLS)
509 - Rotación audit.log con N backups
510 - WIT contracts reales sobre flow types
511 - Métricas exportables (Prometheus endpoint)
512 - shipote-shell click handler
513
514 Track C — Handshake fase 4 (brahman-handshake, 10 TODOs)
515 - Capabilities revocables
516 - Trust beyond peer (delegación)
517 - Métricas + audit chain hacia brain
518
519 Hito 4 · Cosmobiología innovaciones (semana 4-7)
520
521 Roadmap del proyecto, 5 áreas:
522
523 1. Sistema GR (#55-#62) — dual-ring directas+conversas, scrubbing live, HUD
524 triggers, modo rectificación. Requiere expansión de cosmobiologia-engine +
525 cosmobiologia-panel.
526 2. FFT armónico (#63) — detección automática de ciclos en órbitas. Sobre
527 cosmobiologia-modules.
528 3. Research bank (#64-#65) — corpus de cartas + queries. Sobre
529 cosmobiologia-store + cosmobiologia-engine.
530 4. 3D celestial sphere (#66) — renderer esférico vs el 2D actual. Sobre
531 cosmobiologia-render + cosmobiologia-canvas.
532 5. Rectificador automático (#67) — ajuste de hora natal vía eventos confirmados.
533 Sobre cosmobiologia-engine + cosmobiologia-modules.
534
535 Hito 5 · Compat avanzado systemd (semana 5-7, paralelo a Hitos 3-4)
536
537 ┌──────────────────────┬──────────────────────┬────────────────────┐
538 │ shim │ método pendiente │ desbloquea │
539 ├──────────────────────┼──────────────────────┼────────────────────┤
540 │ ente-logind-compat │ Inhibit, Sleep hooks │ GNOME power mgmt │
541 ├──────────────────────┼──────────────────────┼────────────────────┤
542 │ ente-localed-compat │ SetVariable │ apps con locale UI │
543 ├──────────────────────┼──────────────────────┼────────────────────┤
544 │ ente-machined-compat │ MachineImage ops │ nspawn workflows │
545 └──────────────────────┴──────────────────────┴────────────────────┘
546
547 Meta: GNOME Shell arrancable sobre ente-zero sin parches.
548
549 Hito 6 · Polish + DX + onboarding (semana 7-8)
550
551 - scripts/check.sh que corra fmt + clippy + test --workspace
552 - Aliases legacy de binario: shipote → shuma, yahweh → nahual
553 - README raíz que apunte a los 16 SDDs y al ROADMAP
554 - Actualizar seeds/arje-*.card.json con nombres nuevos
555 - Pluma AST con inline elements completos
556
557 ---
558 20 · Diagrama de dependencias del stack
559
560 ┌──────────────┐
561 │ apps/ (23) │
562 └──────┬───────┘
563 ↓
564 ┌──────────────────────────────┐
565 │ modules/ (62) │
566 │ │
567 │ cosmobiologia ←──────┐ │
568 │ ↓ │ │
569 │ nahual + pineal │ │
570 │ ↓ │ │
571 │ shuma akasha nakui │ │
572 │ minga │ │
573 │ gioser pluma vista │ │
574 │ barra │ │
575 └──────────────┬────────────┬──┘
576 ↓ │
577 ┌─────────────┐ │
578 │ runtime/ │←────┘
579 │ bus·cas· │
580 │ wasm·brain │
581 └──────┬──────┘
582 ↓
583 ┌─────────────┐
584 │ init/ │
585 │ ente-zero, │
586 │ kernel, │
587 │ incarnate │
588 └──────┬──────┘
589 ↓
590 ┌─────────────────┐
591 │ protocol/ │
592 │ card·handshake· │
593 │ broker·sidecar │ ← TODOS dependen de esto
594 │ net │
595 └─────────────────┘
596
597 [compat/ corre en paralelo, consume bus/card]
598
599 ---
600 21 · Cronograma global
601
602 sem 1 sem 2 sem 3 sem 4 sem 5 sem 6 sem 7 sem 8
603 ├─Hito1──►
604 ├─Hito2──►
605 ├─Hito3 Track A (brain)──────────────►
606 ├─Hito3 Track B (shuma)──────────────►
607 ├─Hito3 Track C (handshake)──────────►
608 ├─Hito4 (cosmo innov)─────────────────►
609 ├─Hito5 (compat avanzado)──►
610 ├─Hito6 (polish)─►
611
612 Solo persona: ~7-8 semanas continuas. Paralelizado (3 tracks Hito 3 + Hito 4 +
613 Hito 5 disjuntos): ~3-4 semanas.
614
615 ---
616 22 · Bloqueantes críticos (vigilar)
617
618 1. minga-vfs stub → sin él el sistema de archivos de mónadas no existe → bloquea
619 akasha como fuente de datos integrada.
620 2. ente-brain rule engine parcial → sin él, la observabilidad fractal es opaca →
621 bloquea decisiones políticas autónomas del Init.
622 3. Cosmobiología canvas/tree sin tests → 5,145 LOC de UI sin red de seguridad →
623 cualquier refactor en GPUI es riesgoso.
624 4. Compat shims básicos → Inhibit/SetVariable/MachineImage faltan → GNOME no es
625 estable sobre arje.
626
627 ---
628 23 · Resumen de un vistazo
629
630 ┌───────────────┬─────────┬────────┬───────┬─────────────────────────────────┐
631 │ capa/módulo │ madurez │ LOC │ tests │ acción siguiente │
632 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
633 │ protocol │ ★★★★☆ │ 6,260 │ sí │ fase 4 trust (Hito 3C) │
634 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
635 │ init │ ★★★★☆ │ 3,600 │ parc. │ snapshot restore tests (H1) │
636 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
637 │ runtime │ ★★★☆☆ │ 3,400 │ parc. │ brain rule engine (H3A) │
638 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
639 │ compat │ ★★★☆☆ │ 5,000 │ no │ métodos avanzados (H5) │
640 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
641 │ minga │ ★★★★☆ │ 5,091 │ sí │ vfs (H2) ◄ BLOQUEANTE │
642 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
643 │ nahual │ ★★★★★ │ 15,968 │ E2E │ mantenimiento │
644 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
645 │ pineal │ ★★★☆☆ │ 3,900 │ sí │ 5 stubs (H2) │
646 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
647 │ nakui │ ★★★★☆ │ 7,063 │ sí │ docs morfismos (H6) │
648 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
649 │ akasha │ ★★★☆☆ │ 4,395 │ parc. │ cluster tests (H1) │
650 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
651 │ shuma │ ★★★★☆ │ 6,907 │ sí │ auth gateway (H3B) │
652 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
653 │ gioser │ ★★★★★ │ 2,535 │ sí │ estable │
654 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
655 │ pluma │ ★★★☆☆ │ 178 │ no │ AST inline (H6) │
656 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
657 │ vista (HOY) │ ★★★★☆ │ 530 │ 5/5 │ estable │
658 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
659 │ barra (HOY) │ ★★★★☆ │ 280 │ 5/5 │ estable │
660 ├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
661 │ cosmobiologia │ ★★★☆☆ │ 21,502 │ parc. │ tests canvas/tree (H1) + innov │
662 │ │ │ │ │ (H4) │
663 └───────────────┴─────────┴────────┴───────┴─────────────────────────────────┘
664
665 Trazo desde aquí: Hito 1 desbloquea Hito 2, que desbloquea Hito 3 en paralelo
666 con Hito 4 y Hito 5, cerrando con Hito 6 polish. Estimación realista a v1.0
667 estable: 6-8 semanas continuas o 3-4 semanas con paralelización agresiva.
668
669
670 temas de dudas (sí te dije que esa ia estaba loca en ese texto):
671 1. no es hypervisor, pero sí ejecuta procesos con capacidad de aislamiento. lo que hablamos antes, acláralo si no lo hablamos antes. pero vamos a estar conectados con brahman, posiblemente ejecutando procesos en dht.
672 2. usa tu criterio, pero la idea es que este como compositor es el pintor del lienzo, pero va a tener la capacidad de delegar a través de brahman trozos de su superficie a otras aplicaciones/módulos, y estos a su vez pueden disponer de subtrozos para otras aplicaciones/modulos. así que vamos a hacer, tanto pintar en wayland, como orquestar las aplicaciones que tendremos dentro. para aplicaciones agnósticas, que va a ser lo "normal", va a comportarse digamos como un compositor normal.
673 3. no, usa protocolo logind. eso del criu déjalo para un futuro. lo del aislamiento va a seguir la misma política de las cards.
674
675 del navegador:
676 tienes razón. bueno, sigue las mejores reglas para repartir la responsabilidad. es el compositor el que define los layers, no? y la pintada. y se las da a las aplicaciones que se lo piden que puede ejecutar el shell/launcher, ayudame en eso, que hoy no dormí bien. modularidad horizontal.
677
678 decisiones:
679 1. carmen.
680 2. minga es el git, no la red. la red dht debería ser un core invisible para todo el ecosistema brahman. o sea, c.
681 3. criu. déjalo para otro día pero no lo olvides.
682 4. c.
683 5. declarado.
684 6. si es forzado, no. pero cuando sea grande lo voy a querer.
685
686
687
688
689
690
691
692
693
694
695
696 ---
697 Nuevo PLAN_MACRO con subtareas multi-nivel
698
699 FASE A · Foundations cleanup + renames batch (sem 1-2)
700 ├─ A1 · Rename batch en código
701 │ ├─ A1.1 Modificar scripts/rename-fase-a.py (add MOVES + PKG_RENAMES)
702 │ ├─ A1.2 Dry-run verificación
703 │ ├─ A1.3 Ejecutar: git mv + sed Cargo.toml + sed .rs + workspace toml
704 │ ├─ A1.4 cargo check --workspace verde
705 │ ├─ A1.5 Actualizar SDDs (init, runtime, compat → arje; revista; fana)
706 │ ├─ A1.6 Actualizar docs/STATUS.md, ROADMAP.md, PLAN_MACRO.md
707 │ ├─ A1.7 Mover
708 docs/changelog/{init,runtime,compat,minga,nahual,nakui,protocol}.md (referencias
709 internas a arje-)
710 │ └─ A1.8 Commit + push
711 │
712 ├─ A2 · Split arje-brain en 3 sub-crates
713 │ ├─ A2.1 arje-brain-rules (engine + rules + dispatch — 678 LOC)
714 │ ├─ A2.2 arje-brain-cognitive (observer + crystallize + autopromote — 799
715 LOC)
716 │ ├─ A2.3 arje-brain-audit (audit + introspect + metrics — 1,201 LOC)
717 │ ├─ A2.4 arje-brain umbrella opcional (features-based) o eliminar
718 │ ├─ A2.5 Migrar consumidores (arje-zero, chasqui-core)
719 │ └─ A2.6 cargo check + commit
720 │
721 ├─ A3 · Unificar loader duplicado
722 │ ├─ A3.1 Mover arje-brain/loader.rs → brahman-cards
723 │ ├─ A3.2 brahman-cards gana load_card_file + load_rules_file +
724 extract_*_from_json
725 │ ├─ A3.3 arje-brain depende de brahman-cards
726 │ └─ A3.4 cargo check + commit
727 │
728 ├─ A4 · Extraer sandokan-lifecycle de shuma-core
729 │ ├─ A4.1 Crear crate runtime/sandokan-lifecycle
730 │ ├─ A4.2 Mover primitivas: TTL + restart backoff + quota enforce + drain +
731 snapshot
732 │ ├─ A4.3 shuma-core depende de sandokan-lifecycle como cliente
733 │ ├─ A4.4 Tests existentes siguen pasando
734 │ └─ A4.5 cargo check + commit
735 │
736 ├─ A5 · Ampliar arje-incarnate con pivot_root + OverlayFS
737 │ ├─ A5.1 Agregar pivot_root al builder de Incarnator
738 │ ├─ A5.2 Agregar capa OverlayFS declarativa (rootfs RO + session RW)
739 │ ├─ A5.3 Tests: chroot básico funciona + overlay funciona
740 │ └─ A5.4 cargo check + commit
741 │
742 └─ A6 · Crear brahman-ssh-multiplex
743 ├─ A6.1 Wrapper sobre russh
744 ├─ A6.2 Canales paralelos + TCP_NODELAY + KeepAlive 15s
745 ├─ A6.3 Reconexión silenciosa
746 ├─ A6.4 Tests con servidor SSH local
747 └─ A6.5 cargo check + commit
748
749 FASE B · Core libraries (sem 2-5)
750 ├─ B1 · sandokan (orquestador library)
751 │ ├─ B1.1 Trait Engine { run/track/telemetry }
752 │ ├─ B1.2 LocalEngine (in-process: arje-incarnate + arje-brain-rules +
753 broker)
754 │ ├─ B1.3 DaemonEngine (postcard sobre Unix socket)
755 │ ├─ B1.4 RemoteEngine (sobre brahman-ssh-multiplex + DaemonEngine remoto)
756 │ ├─ B1.5 Engine::auto() detecta socket y elige
757 │ └─ B1.6 Tests + integración con arje-zero como daemon host
758 │
759 ├─ B2 · verbo (embeddings multi-backend)
760 │ ├─ B2.1 verbo-core (trait Provider, ModelId, EmbeddingVector)
761 │ ├─ B2.2 verbo-cohere (HTTP API remoto)
762 │ ├─ B2.3 verbo-bge-local (bge-code-large vía ort)
763 │ ├─ B2.4 verbo-mini-local (MiniLM-L6-v2 384d vía ort, para badu)
764 │ ├─ B2.5 verbo-fastembed (fallback)
765 │ ├─ B2.6 verbo-daemon (binario --backend X, multi-instancia)
766 │ ├─ B2.7 verbo-client (cliente IPC)
767 │ └─ B2.8 Migrar chasqui-nous-real de fastembed inline → verbo-client
768 │
769 ├─ B3 · brahman-dht (library DHT agnóstica)
770 │ ├─ B3.1 Sobre brahman-net libp2p (kad + provider records)
771 │ ├─ B3.2 Trait DhtBackend con kind: Code | Card | Persona | ...
772 │ ├─ B3.3 Publish + lookup + announce
773 │ └─ B3.4 Consumido por minga-p2p (kind=Code), brahman-card-discovery
774 (kind=Card), agorapura (kind=Persona)
775 │
776 └─ B4 · brahman-card-discovery
777 ├─ B4.1 Trait CardSearch + impls local (CAS + filesystem) + dht (vía
778 brahman-dht)
779 ├─ B4.2 Filtros por kind, flow type, capabilities
780 └─ B4.3 Widget nahual/widgets/card-browser consume CardSearch
781
782 FASE C · Apps standalone (sem 4-12, paralelizables)
783 ├─ C1 · fana (prioridad alta — absorbe pluma + nuevo writer's DAG editor)
784 │ ├─ C1.1 fana-core (NarrativeAtom + NarrativeGraph + CoherenceState)
785 │ ├─ C1.2 fana-md (absorbe pluma-md como parser markdown)
786 │ ├─ C1.5 fana-store (sled o RocksDB + bincode/rkyv zero-copy)
787 │ ├─ C1.6 fana-llm (cliente HTTP a LLMs remotos vía reqwest)
788 │ ├─ C1.7 fana-render-plan (DrawCommands agnósticos: editor + sidepane +
789 ghost trace)
790 │ ├─ C1.8 fana-editor-gpui (WorkspaceEditor View custom +
791 OscilloscopeSidepane + GhostTrace)
792 │ ├─ C1.9 fana-md-reader-web (absorbe pluma-reader-web, sigue siendo dep de
793 gioser-web)
794 │ ├─ C1.10 fana-editor-web (futuro WASM editor)
795 │ ├─ C1.11 apps/fana (binario GPUI)
796 │ └─ C1.12 apps/fana-web (futuro cdylib)
797 │
798 ├─ C2 · badu (note-taking, ex-akashi)
799 ├─ C3 · dominium (simulador psicológico)
800 ├─ C4 · takiy (composición musical)
801 ├─ C5 · matilda (server admin)
802 ├─ C6 · mirada (compositor Wayland, ex-carmen)
803 └─ C7 · agorapura (identidad humana federada)
804
805 FASE D · charka (paralelo multi-mes)
806 FASE E · yachay (integrador, sem 12-18)
807 FASE F · Cobertura tests + cerrar stubs cosmo/pineal (continuo)
808 FASE G · Backlog (rimay, yuyay, apu, tinkuy, nutu, ...)
809
810
811
812
813
814
815 cargo build -p sandokan-cli
816 ./target/debug/sandokan daemon & # terminal/background
817 ./target/debug/sandokan run /bin/sleep 300 # → card_id
818 ./target/debug/sandokan list
819 ./target/debug/sandokan status <card-id>
820 ./target/debug/sandokan stop <card-id>
821
822
823
824
825
826
827● Comandos de prueba
828
829 target/ está en 22 GB — pero tranquilo: está gitignored, el repo git
830 real son 96 MB. El "desborde" es disco, no el repositorio. Más abajo
831 el cargo clean.
832
833 Todo de una
834
835 cargo check --workspace # compila los ~145 crates
836 cargo test --workspace # corre TODOS los tests (~270)
837
838 sandokan — el ejecutable interactivo
839
840 cargo build -p sandokan-cli
841 ./target/debug/sandokan daemon & # deja el daemon
842 corriendo
843 ./target/debug/sandokan run /bin/sleep 300 # imprime un card_id
844 ./target/debug/sandokan list # lo ves activo
845 ./target/debug/sandokan status <card-id> # → Running
846 ./target/debug/sandokan telemetry <card-id> # → mem / nproc
847 ./target/debug/sandokan stop <card-id> # → detenido
848 ./target/debug/sandokan status <card-id> # → Killed
849
850 Tests por área (lo construido esta sesión)
851
852 # Fase A — foundations
853 cargo test -p arje-brain-rules -p arje-brain-cognitive -p
854 arje-brain-audit \
855 -p sandokan-lifecycle -p arje-incarnate
856
857 # Fase B — orquestador + discovery
858 cargo test -p sandokan-core -p sandokan-local -p sandokan-daemon -p sandokan \
859 -p brahman-dht -p brahman-card-discovery -p brahman-ssh-multiplex
860
861 # Fase F — pineal (6 charts)
862 cargo test -p pineal-render -p pineal-export -p pineal-heatmap \
863 -p pineal-polar -p pineal-treemap -p pineal-flow -p
864 pineal-mesh
865
866 # Apps Fase C — núcleos
867 cargo test -p fana-core -p fana-graph -p fana-store -p fana-semantic
868 # fana
869 cargo test -p shuma-intent
870 # shuma shell
871 cargo test -p verbo-core -p verbo-mock
872 # verbo
873 cargo test -p dominium-core
874 # dominium
875
876 Validación arje (boot — ya existía)
877
878 seeds/validate.sh seeds/arje-minimal.card.json
879
880 ⚠ Disco — cargo clean
881
882 target/ = 22 GB y va a seguir creciendo (gpui, libp2p, russh son
883 pesados). Cuando quieras recuperar ese espacio:
884
885 cargo clean # borra target/ entero — recupera ~22 GB
886
887 Tras eso, el próximo cargo build recompila todo desde cero (lento,
888 ~varios min). Recomendación: corré tus pruebas, y cuando termines una
889 tanda, cargo clean. No afecta nada del código ni del repo — sólo
890 artefactos de compilación.
891
892 ¿Querés que lo corra yo ahora (cargo clean), o lo dejás para cuando
893 termines de probar esta tanda? Si lo corro ahora, tu próxima prueba
894 recompila de cero.
895
896
897
898 Lo construido — 6 módulos, 16 crates nuevos
899
900 ┌───────────┬───────────────────────────────┬───────┬────────────────────────────────┐
901 │ módulo │ crates │ tests │ estado │
902 ├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
903 │ dominium │ render-plan, canvas-gpui, app │ 37 │ ✅ completo │
904 ├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
905 │ verbo │ verbo-daemon │ 8 │ ✅ daemon entre-procesos │
906 ├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
907 │ fana │ render-plan, editor-gpui, app │ 12 │ ✅ editor DAG (prioridad alta) │
908 ├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
909 │ agorapura │ core, graph, app │ 22 │ ✅ identidad federada │
910 ├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
911 │ badu │ core, gravity, app │ 29 │ núcleo + demo │
912 ├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
913 │ takiy │ takiy-core │ 24 │ núcleo de teoría musical │
914 └───────────┴───────────────────────────────┴───────┴────────────────────────────────┘
915
916 132 tests nuevos, todos verdes. cargo check --workspace verde en cada commit. 14 commits pusheados.
917
918 Para que verifiques tú (apps GPUI — no las puedo ver)
919
920 cargo run -p dominium # simulador isométrico vivo
921 cargo run -p fana # editor DAG — «Mutar raíz» dispara la onda de choque
922 cargo run -p shuma-shell # el shell de 3 zonas
923
924 Ya verifiqué yo (CLI, corren bien)
925
926 cargo run -p agorapura # Venezuela atestigua a Yumaira; firma falsa rechazada; veredictos por política
927 cargo run -p badu # cuaderno: grafo de enlaces + clústeres por gravedad semántica
928
929
930 Verificación
931
932 Apps GPUI — necesito que las veas tú:
933 cargo run -p dominium # simulador isométrico vivo
934 cargo run -p fana # editor DAG — «Mutar raíz» dispara la onda de choque
935 cargo run -p shuma-shell # el shell de 3 zonas
936
937 Demos CLI — ya las verifiqué yo, corren bien:
938 cargo run -p agorapura # Venezuela atestigua a Yumaira; veredictos por política
939 cargo run -p badu # cuaderno: grafo de enlaces + clústeres por gravedad
940 cargo run -p matilda # inventario → docker-compose + nginx + plan de reconciliación
941 cargo run -p yachay # notebook: orden de ejecución + digest cambia al editar
942
943
944
945
946 matilda — el puente plan→ejecución
947
948 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
949 correr en el servidor— y a un script bash listo para ejecutar. cargo run -p matilda ahora lo imprime:
950
951 # crear contenedor «api»
952 docker run -d --name api --restart unless-stopped -p 9000:9000 ...
953 # actualizar contenedor «web»
954 docker rm -f web
955 docker run -d --name web ...
956 # crear vhost «api.jlsoltech.com»
957 cat > /etc/nginx/sites-enabled/api.jlsoltech.com.conf <<'MATILDA_EOF'
958 server { listen 443 ssl; ... }
959 MATILDA_EOF
960 nginx -t && nginx -s reload
961
962
963
964
965 1 · El ejecutable
966
967 apps/matilda ya es un ejecutable CLI completo:
968 cargo run -p matilda -- example > /tmp/inv.json
969 cargo run -p matilda -- plan /tmp/inv.json --discover
970 cargo run -p matilda -- apply /tmp/inv.json --host deploy@servidor
971
972 2 · Embebido en el shell — cargo run -p shuma-shell
973
974 matilda ahora es una herramienta del shell, no una app aparte. Dentro de la ventana de shuma:
975
976 :matilda plan /tmp/inv.json → tarjeta con el plan de reconciliación
977 :matilda script /tmp/inv.json → tarjeta con el script bash
978 :matilda apply /tmp/inv.json → ejecuta el script de verdad
979
980 - Reconcilia contra el estado real de la máquina (lee tus contenedores docker + sitios nginx).
981 - plan/script aparecen como tarjetas sintéticas en el feed.
982 - apply corre el script como cualquier comando: salida en streaming, captura acotada, botón de matar, acordeón — todo el aparato del shell,
983 gratis.
984 - El panel [RUN] tiene ahora una sección [tools] con ⚙ matilda — un clic precarga :matilda plan en el input para que sólo nombres el archivo.
985
986
987
988