tawasuyu

tawasuyu/brahman

Rust 492TOML 194Markdown 53JSON 176939 Definitions

⎇ 88a3aae7626ce823f3142cfbefaa834b39ceb62f vamos.txt 1118 lines · 80.1 KB History raw

feat(shuma): cajón de resultados del shell — desplegable desde el pie 2bd6aaad0 · sergio ·

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  Flujo end-to-end demoable hoy sin gráficos:
989  cargo run -p mirada-body --example headless -- /tmp/mirada.sock   # el Cuerpo
990  MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada                # el Cerebro
991  Sin MIRADA_SOCKET, mirada corre en simulación: ventanas sintéticas y teclado propio (n abre, j/k foco, tab cicla layout, 1-9 escritorios).
992
993
994
995  El Cuerpo de verdad — mirada-compositor:
996  Compositor Wayland teselante real sobre smithay, con dos backends gráficos (main() elige; --winit/--drm lo fuerzan):
997   · winit — corre anidado, una ventana dentro de tu sesión X11/Wayland (para desarrollar sin dejar el escritorio).
998   · drm   — corre nativo sobre una TTY, sin sesión anfitriona: toma GPU (DRM/KMS/GBM/EGL), teclado y ratón (libinput).
999  cargo run -p mirada-compositor                                   # autónomo: Cerebro Desktop embebido, un solo proceso
1000  WAYLAND_DISPLAY=wayland-1 foot                                    # lanza clientes contra él (imprime su WAYLAND_DISPLAY al arrancar)
1001  MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada-compositor     # enlazado: la app mirada (Cerebro GPUI) decide la geometría
1002  cargo run -p mirada-compositor -- --drm                          # nativo sobre TTY (MIRADA_STARTUP=foot lanza un cliente al arrancar)
1003  Habla wl_compositor/xdg_shell/wl_shm/wl_seat/wl_data_device/xdg-decoration/zwp_linux_dmabuf; compone con GlesRenderer.
1004  dmabuf permite clientes que pintan por GPU (apps GPUI, navegadores acelerados). Reusa mirada-body y mirada-link.
1005  En --drm el foco sigue al puntero y clics/rueda van a la ventana debajo; el cursor toma la forma del cliente.
1006  Cada ventana lleva un marco fino: azul la enfocada, gris las demás.
1007  Super+arrastre mueve la ventana (botón izq.) o la redimensiona (der.) — al arrastrarla pasa a flotar.
1008  Fuerza xdg-decoration ServerSide y no dibuja marco: las ventanas teseladas van sin barra de título.
1009  Lanzar programas: acción spawn:<comando> del keymap (Super+Shift+Return → spawn:foot por defecto).
1010  Lanzador de apps: mirada-launcher (escanea los .desktop, lista filtrable de terminal); atado a Super+p.
1011  Conmutación de VT: Ctrl+Alt+Fn salta a otra TTY y vuelve sin romper la sesión (pausa DRM + libinput).
1012  Acople del shell: una ventana con app_id "carmen.shell" se ancla en una franja al pie; el resto tesela arriba.
1013  shuma-shell --launcher: corre como ese shell — barra compacta GPUI con la línea de comandos + barra de ventanas.
1014  La barra de ventanas las consulta por el socket de control de carmen (ListWindows); un clic enfoca.
1015  Clic en el estado despliega el cajón de resultados: la ventana del shell crece y carmen la ancla al pie.
1016  Sesión: ~/.config/mirada/autostart (un comando por línea) + script session/mirada-session + carmen.desktop.
1017  Ver crates/apps/mirada-compositor/README.md.
1018
1019
1020
1021  Atajos de teclado configurables — mirada-brain::Keymap:
1022  El keymap vive sólo en el Cerebro; el Cuerpo nunca lo ve (sólo recibe la lista de cadenas a interceptar, GrabKeys).
1023  Disco: RON de texto en ~/.config/mirada/keymap.ron — editable a mano, versionable, recargado en caliente (notify).
1024  Si falta, la app escribe uno por defecto documentado; si está corrupto, avisa y usa el de por defecto sin pisarlo.
1025  cargo run -p mirada-brain --example keymap-default               # imprime el keymap por defecto en RON
1026  Acciones como cadena estable: "focus-next", "layout:grid", "workspace:3", "spawn:foot" (DesktopAction: Display + FromStr).
1027  Sin ejecutable configurador: el editor de texto del usuario, y la app mirada sobre el mismo API Keymap.
1028
1029
1030
1031  API de acciones — mirada-ctl + HUD interactivo:
1032  Toda acción converge en Desktop::apply(DesktopAction); el keymap es sólo un front-end más.
1033  mirada-ctl — control externo por CLI (estilo swaymsg/hyprctl):
1034  mirada-ctl focus-next          # cambia el foco
1035  mirada-ctl focus-window 5      # enfoca una ventana concreta (FocusWindow: salta de escritorio si hace falta)
1036  mirada-ctl workspace 3         # va al escritorio 3
1037  mirada-ctl windows             # lista las ventanas (id, escritorio, app, título)
1038  mirada-ctl actions             # lista las acciones disponibles
1039  Socket de control aparte (mirada-brain::ctl: CtlRequest/CtlReply, marco postcard). Lo abre el Cerebro:
1040  siempre la app mirada; mirada-compositor sólo en modo embebido.
1041  HUD interactivo: en la app mirada, pips de escritorio y ventanas del lienzo son clicables.
1042  cargo run -p mirada-brain --example headless-ctl   # Cerebro sin gráficos para probar mirada-ctl
1043
1044
1045
1046  Layouts — 7 modos de teselado, intercambiables por el API:
1047  master-stack · centered-master · spiral (espiral de Fibonacci) · grid · columns · rows · monocle
1048  mirada-ctl layout spiral         # fija un modo
1049  mirada-ctl cycle-layout          # siguiente modo (LayoutMode::next)
1050  mirada-ctl grow-master / shrink-master   # redimensiona el área maestra (Super+l / Super+h)
1051  Atajos directos: Super+t/m/g/c/r/d/s. CenteredMaster y Spiral pensados para monitores anchos.
1052  El motor (mirada-layout::tile) es puro y determinista; split() reparte sin perder un píxel.
1053
1054
1055
1056  nmaster + promover a maestra + smart gaps (al estilo dwm):
1057  LayoutParams.master_count = nº de ventanas en el área maestra (MasterStack y CenteredMaster).
1058  mirada-ctl inc-master / dec-master     # Super+, / Super+.   — nmaster ±1 (acotado 1..9)
1059  mirada-ctl promote-to-master           # Super+Return        — la enfocada salta al puesto maestro
1060  Smart gaps: una sola ventana va a sangre, sin margen desperdiciado.
1061  combo_string del compositor ahora canoniza teclas con nombre (Return, Tab, F5, flechas…),
1062  no sólo caracteres imprimibles — así Super+Return es un atajo válido del keymap.
1063
1064
1065
1066  Ventanas flotantes — toggle-float (Super+f):
1067  La ventana enfocada sale del teselado a un rectángulo libre (centrado, 60% de pantalla);
1068  las demás reteselan sin ella. Workspace guarda las flotantes aparte; layout() las pone al final.
1069  WindowPlacement y BodyOp::Configure llevan floating: bool — el Cuerpo las compone por encima
1070  (mirada-compositor ordena las flotantes al frente de la lista front-to-back).
1071  mirada-ctl toggle-float    # alterna flotante / teselada
1072
1073
1074
1075  Reglas de ventana — mirada-brain::rules:
1076  Config declarativa en RON (~/.config/mirada/rules.ron); el Desktop la consulta en cada
1077  WindowOpened y manda la ventana a su escritorio / la hace flotar.
1078  Cada regla casa por subcadena de app_id y/o title (sin mayúsculas); gana la primera.
1079  Ejemplo:  (app_id: "firefox", workspace: 2)   ·   (title: "Picture-in-Picture", floating: true)
1080  La primera vez se escribe una plantilla con ejemplos comentados.
1081
1082
1083
1084  Pantalla completa — toggle-fullscreen (Super+Shift+f):
1085  La ventana enfocada cubre toda la salida (sin gap), oculta al resto y se lleva el foco.
1086  Workspace.fullscreen: Option<WindowId>; WindowPlacement/BodyOp::Configure llevan fullscreen: bool;
1087  el Cuerpo le fija el estado xdg_toplevel Fullscreen. Alternar de nuevo restaura el teselado.
1088  mirada-ctl toggle-fullscreen
1089
1090
1091
1092  Multi-monitor real — el Desktop tesela todas las salidas:
1093  Cada Output muestra un escritorio distinto; relayout() las tesela todas en un solo Place.
1094  Pedir un escritorio que ya muestra otra salida → las intercambia (ningún escritorio se ve 2 veces).
1095  mirada-ctl focus-output-next   # Super+o — mueve el foco al siguiente monitor
1096  El foco del teclado es único: sólo la ventana enfocada de la salida enfocada.
1097  cargo run -p mirada-brain --example headless-ctl   # ahora levanta 2 salidas
1098
1099
1100
1101  Scratchpad — terminal desplegable (Super+`):
1102  send-to-scratchpad guarda la ventana enfocada (sale del teselado, en ningún escritorio).
1103  toggle-scratchpad la invoca flotando y centrada en el escritorio actual, o la oculta.
1104  Una ventana del scratchpad te sigue: invocarla desde otro escritorio la trae consigo.
1105  mirada-ctl windows la lista como «esc scratch».
1106
1107
1108
1109  Fullscreen iniciado por el cliente + HUD multi-salida:
1110  BodyEvent::FullscreenRequest — cuando un cliente pide xdg set_fullscreen, el Cuerpo
1111  (XdgShellHandler::fullscreen_request) avisa al Cerebro y la ventana entra a pantalla completa sola.
1112  El lienzo de la app mirada dibuja ahora todas las salidas a escala, cada una con su marco;
1113  en simulación, Shift+n añade un monitor más.
1114
1115
1116
1117
1118