2bd6aaad02
Fase 3c: el shell muestra la salida de los comandos en un cajón que se despliega hacia arriba sobre el escritorio. carmen — la ventana del shell deja de tener un alto fijo: `render_loc` la ancla al pie de la salida y la coloca por su **tamaño real**, así puede crecer hacia arriba. La franja reservada sigue siendo la barra (40 px); el cajón, al abrirse, se solapa sobre las teseladas sin re-teselar. `render_loc` toma ahora el alto de la salida. shuma-shell — un clic en el estado alterna `drawer_open`: la ventana crece (`Window::resize`, que GPUI 0.2 expone) a barra + cajón, o vuelve a sólo barra. El cajón reusa `render_run` para pintar los últimos comandos y su salida, con scroll. `render_launcher` pasa a una columna: cajón opcional arriba, barra abajo. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1119 lines
80 KiB
Plaintext
1119 lines
80 KiB
Plaintext
|
||
● Reporte técnico — Monorepo Brahman
|
||
|
||
Estado al 2026-05-19 · 126 crates · ~78,000 LOC · cargo check --workspace verde
|
||
|
||
---
|
||
0 · Panorama
|
||
|
||
Sistema operativo fractal en Rust: cada cómputo se modela como Card, los módulos
|
||
se acoplan sólo vía contratos serializables (brahman-card), el aislamiento es
|
||
uniforme (ente-incarnate), y el routing es un service-locator de tipos
|
||
(brahman-broker). El monorepo se reorganizó hoy en 6 capas físicas:
|
||
|
||
crates/
|
||
├── protocol/ 9 crates · contratos + routing
|
||
├── init/ 5 crates · PID 1 + encarnación Linux
|
||
├── runtime/ 5 crates · bus + cas + wasm + brain
|
||
├── compat/ 14 crates · shims D-Bus systemd
|
||
├── modules/ 62 crates · funcionalidad de dominio
|
||
└── apps/ 23 crates · binarios finales
|
||
|
||
---
|
||
1 · Capa protocol/ — 6,260 LOC · ★★★★☆
|
||
|
||
┌─────────────────┬──────┬──────┬──────┬──────────────────────────────────┐
|
||
│ crate │ LOC │ test │ TODO │ rol │
|
||
│ │ │ s │ s │ │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-card │ 1,29 │ sí │ 5 │ Card { soma, payload, flow, │
|
||
│ │ 0 │ │ │ permissions, ... } │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-card-wi │ 165 │ sí │ 0 │ Extracción WIT desde componentes │
|
||
│ t │ │ │ │ WASM │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-cards │ 643 │ sí │ 2 │ Templates Nickel + helpers │
|
||
│ │ │ │ │ consumer/producer/broker │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-handsha │ 2,94 │ sí │ 10 │ Init↔módulo: Hello/Ping/ListSess │
|
||
│ ke │ 2 │ │ │ ions/ListMatches │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-broker │ 995 │ sí │ 2 │ Matching híbrido (Exact + │
|
||
│ │ │ │ │ Structural) │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-admin │ 225 │ no │ 0 │ Socket admin para snapshots │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-sidecar │ 565 │ sí │ 0 │ spawn(card) para apps │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ brahman-net │ 423 │ no │ 0 │ libp2p │
|
||
│ │ │ │ │ (TCP+noise+yamux+kad+identify) │
|
||
├─────────────────┼──────┼──────┼──────┼──────────────────────────────────┤
|
||
│ ente-card │ — │ — │ — │ Alias legacy (re-export) │
|
||
└─────────────────┴──────┴──────┴──────┴──────────────────────────────────┘
|
||
|
||
Hecho. Handshake fase 1–3 (libp2p stream → DHT discovery → trust Ed25519).
|
||
Broker emparejando con dos estrategias. Sidecar reusable por todas las apps.
|
||
Allowlist/denylist con hot reload <250ms.
|
||
|
||
Pendiente. Fase 4 trust: capabilities revocables, beyond-peer (delegación),
|
||
métricas exportables. Tests faltan en brahman-admin (lo único sin cobertura).
|
||
|
||
---
|
||
2 · Capa init/ — ~3,600 LOC · ★★★★☆
|
||
|
||
┌────────────────┬──────┬────────────────────────────────────────────────────┐
|
||
│ crate │ tipo │ rol │
|
||
├────────────────┼──────┼────────────────────────────────────────────────────┤
|
||
│ ente-zero │ bin │ PID 1: reap loop + bus + handshake server + │
|
||
│ │ │ brahman-net opc. │
|
||
├────────────────┼──────┼────────────────────────────────────────────────────┤
|
||
│ ente-kernel │ lib │ bootstrap_kernel_surface, subreaper, │
|
||
│ │ │ SIGCHLD/uevent streams │
|
||
├────────────────┼──────┼────────────────────────────────────────────────────┤
|
||
│ ente-soma │ lib │ Wrapper ~30 LOC sobre ente-incarnate (compat API │
|
||
│ │ │ histórica) │
|
||
├────────────────┼──────┼────────────────────────────────────────────────────┤
|
||
│ ente-incarnate │ lib │ clone(2) + namespaces + cgroup + rlimits + cpu + │
|
||
│ │ │ child_pre_exec │
|
||
├────────────────┼──────┼────────────────────────────────────────────────────┤
|
||
│ ente-snapshot │ lib │ FractalSnapshot JSON (v1–v4 con forward-compat) │
|
||
└────────────────┴──────┴────────────────────────────────────────────────────┘
|
||
|
||
Hecho. Bootea bare metal + QEMU + initramfs (documentado en docs/arje-boot.md).
|
||
ente-incarnate con builder pattern, ChildStdio + ChildPreExec declarativo,
|
||
async-signal-safe. Snapshot v4 con replay buffer persistido + live pipelines.
|
||
|
||
Pendiente. Cobertura de tests sobre snapshot restore con stale fds. Validación
|
||
de re-encarnación tras restore.
|
||
|
||
---
|
||
3 · Capa runtime/ — ~3,400 LOC · ★★★☆☆
|
||
|
||
┌────────────┬───────────────────────────────────────────────────────┬───────┐
|
||
│ crate │ rol │ TODOs │
|
||
├────────────┼───────────────────────────────────────────────────────┼───────┤
|
||
│ ente-bus │ Unix SOCK_STREAM + postcard. │ 1 │
|
||
│ │ Announce/Invoke/ListEntes │ │
|
||
├────────────┼───────────────────────────────────────────────────────┼───────┤
|
||
│ ente-cas │ SHA-256 content-addressed: blobs Wasm + audit log │ 0 │
|
||
├────────────┼───────────────────────────────────────────────────────┼───────┤
|
||
│ ente-wasm │ Encarna Payload::Wasm vía wasmi en thread dedicado │ 1 │
|
||
├────────────┼───────────────────────────────────────────────────────┼───────┤
|
||
│ ente-brain │ Rule engine + observer estadístico + audit chain │ 11 │
|
||
├────────────┼───────────────────────────────────────────────────────┼───────┤
|
||
│ ente-echo │ Ente prueba — Capability::Endpoint(echo) │ 1 │
|
||
└────────────┴───────────────────────────────────────────────────────┴───────┘
|
||
|
||
Hecho. Bus + CAS + wasm operativos. SO_PEERCRED para identidad. Audit chain
|
||
hashea cada evento del bus al CAS.
|
||
|
||
Pendiente crítico. ente-brain concentra el 78% de la deuda técnica de esta capa:
|
||
el rule engine declarativo está parcialmente implementado, falta el evaluador
|
||
completo de policies + observer cross-ente.
|
||
|
||
---
|
||
4 · Capa compat/ — ~5,000 LOC · ★★★☆☆
|
||
|
||
14 shims D-Bus operativos como binarios standalone. Suficiente para que
|
||
desktop-file-utils, xdg-open, gnome-session, login managers y CLIs systemd-aware
|
||
no rompan al arrancar sobre ente-zero.
|
||
|
||
Hecho. Cada shim reclama un well-known name (org.freedesktop.X1), implementa la
|
||
interfaz mínima del ecosistema, loggea al audit de ente-brain.
|
||
|
||
Pendiente. Métodos avanzados — Inhibit/Sleep hooks en logind, SetVariable en
|
||
localed, MachineImage operations en machined. Necesarios para correr GNOME Shell
|
||
end-to-end sin parches.
|
||
|
||
---
|
||
5 · modules/semantic_dht/ (minga) — 5,091 LOC · ★★★★☆
|
||
|
||
┌─────────────┬───────┬──────────────────────────────────────────────┐
|
||
│ crate │ LOC │ rol │
|
||
├─────────────┼───────┼──────────────────────────────────────────────┤
|
||
│ minga-core │ 3,085 │ Parser tree-sitter + α-hashing (5 lenguajes) │
|
||
├─────────────┼───────┼──────────────────────────────────────────────┤
|
||
│ minga-p2p │ 1,105 │ libp2p kad + bootstrap + provider records │
|
||
├─────────────┼───────┼──────────────────────────────────────────────┤
|
||
│ minga-store │ 425 │ Sled backend para índice local │
|
||
├─────────────┼───────┼──────────────────────────────────────────────┤
|
||
│ minga-cli │ 474 │ CLI: index, search, peers, bootstrap │
|
||
├─────────────┼───────┼──────────────────────────────────────────────┤
|
||
│ minga-vfs │ 2 │ STUB — Mount FUSE de mónadas remotas │
|
||
└─────────────┴───────┴──────────────────────────────────────────────┘
|
||
|
||
Hecho. α-hashing cubre Rust (let-else, if-let, or-patterns, let-chains), Python,
|
||
TypeScript, JavaScript, Go. Indexa repos reales. DHT publica + descubre via
|
||
kad. 15 TODOs en core (más patterns para edge cases).
|
||
|
||
Bloqueante para uso end-to-end. minga-vfs es stub de 2 LOC. Sin él no hay forma
|
||
de montar las mónadas indexadas como filesystem navegable.
|
||
|
||
---
|
||
6 · modules/nahual/ (ex-yahweh) — 15,968 LOC · ★★★★★
|
||
|
||
Framework GPUI backbone del monorepo.
|
||
|
||
Libs (núcleo, 8 crates): core, theme, launcher, bus, meta-schema, meta-runtime,
|
||
providers/{fs,sqlite}. Tema persistente entre runs, MetaUi declarativa,
|
||
providers de datos.
|
||
|
||
Widgets (12 crates): tree, container_core, splitter, tabs, tiled, text_input,
|
||
meta-form, banner, card, stat-card, app-header, theme-switcher. Cada uno <500
|
||
LOC, reusable individualmente.
|
||
|
||
Hecho. Tests E2E con gpui::TestAppContext. nahual-shell define el patrón
|
||
estándar de explorer (sidebar+main+status+hot-reload). Consumido por 5 explorers
|
||
+ cosmobiologia.
|
||
|
||
Pendiente. Mantenimiento. Documentar el patrón "explorer estándar" como guía de
|
||
extensión.
|
||
|
||
---
|
||
7 · modules/pineal/ (ex-lapaloma) — ~3,900 LOC · ★★★☆☆
|
||
|
||
13 crates de data-viz con backends pluggables (CPU+GPUI, GPU stub, SVG export).
|
||
|
||
Funcionales (5 charts): core (878), render (386), cartesian (1397), financial
|
||
(688), stream (231), phosphor (312), export.
|
||
|
||
Stubs (<50 LOC c/u): polar, heatmap, treemap, flow, mesh.
|
||
|
||
Hecho. Trait Canvas agnóstico, RenderPlan con RenderCmd variants, backend GPUI
|
||
completo. Cartesian con axes + viewport + series. Financial con candlestick +
|
||
OHLC. Streaming a 60Hz con phosphor trail (alpha decay).
|
||
|
||
Pendiente. Cerrar los 5 stubs en orden polar → heatmap → treemap → flow → mesh.
|
||
|
||
---
|
||
8 · modules/nakui/ — 7,063 LOC · ★★★★☆
|
||
|
||
ERP categórico: entidades = objetos, morfismos = operaciones de negocio.
|
||
|
||
Hecho. Schema declarativo Nickel (migrado de KCL). Event log con replay al
|
||
startup. Snapshot/compaction automático. Validación FieldKind cross-field. 6
|
||
módulos ERP estándar incluidos como ejemplos. CRUD completo + Action::Morphism
|
||
wired al pipeline.
|
||
|
||
Pendiente. Documentar el patrón de morfismos en Nickel como guía para extender
|
||
el ERP a dominios nuevos.
|
||
|
||
---
|
||
9 · modules/akasha/ (ex-nouser) — 4,395 LOC · ★★★☆☆
|
||
|
||
┌──────────────────┬───────┬────────────────────────────────────────────────┐
|
||
│ crate │ LOC │ rol │
|
||
├──────────────────┼───────┼────────────────────────────────────────────────┤
|
||
│ akasha-core │ 2,215 │ Daemon: scanner FS + DB sled + cluster k-means │
|
||
├──────────────────┼───────┼────────────────────────────────────────────────┤
|
||
│ akasha-card │ 709 │ Card del daemon + capabilities │
|
||
├──────────────────┼───────┼────────────────────────────────────────────────┤
|
||
│ akasha-nous │ (lib) │ Protocolo Nous (JSON line-delimited) │
|
||
├──────────────────┼───────┼────────────────────────────────────────────────┤
|
||
│ akasha-nous-mock │ (bin) │ Embeddings deterministas (testing) │
|
||
├──────────────────┼───────┼────────────────────────────────────────────────┤
|
||
│ akasha-nous-real │ 642 │ Embeddings con fastembed + ort │
|
||
└──────────────────┴───────┴────────────────────────────────────────────────┘
|
||
|
||
Hecho. Pipeline scan+embed+cluster funcional. notify watcher con debounce +
|
||
re-publish al broker. Hidratación vía sled + path_hint. Centroid model
|
||
versionado. Cache de embeddings con write-through al CAS de arje.
|
||
|
||
Pendiente crítico. Tests sobre cluster.rs (k-means actual es naive). Manejo de
|
||
drift de embeddings cuando cambia el modelo subyacente.
|
||
|
||
---
|
||
10 · modules/shuma/ (ex-shipote) — 6,907 LOC · ★★★★☆
|
||
|
||
┌────────────────┬───────┬───────────────────────────────────────────────────┐
|
||
│ crate │ LOC │ rol │
|
||
├────────────────┼───────┼───────────────────────────────────────────────────┤
|
||
│ shuma-core │ 3,518 │ WorkspaceManager + pipeline + persist + │
|
||
│ │ │ flow_channel │
|
||
├────────────────┼───────┼───────────────────────────────────────────────────┤
|
||
│ shuma-card │ 655 │ WorkspaceSpec + PipelineSpec + ExitPolicy + │
|
||
│ │ │ DiscernPolicy │
|
||
├────────────────┼───────┼───────────────────────────────────────────────────┤
|
||
│ shuma-protocol │ 444 │ Wire postcard length-prefixed │
|
||
├────────────────┼───────┼───────────────────────────────────────────────────┤
|
||
│ shuma-discern │ 307 │ DiscernPipeline + MagicBytes/Card/Json/Toml/Utf8 │
|
||
│ │ │ probes │
|
||
└────────────────┴───────┴───────────────────────────────────────────────────┘
|
||
|
||
Hecho. 20 fases completadas (A→S, ver docs/changelog/shuma.md):
|
||
- A: 9 crates iniciales + smoke E2E
|
||
- B: pipelines con discern enrichment
|
||
- C: pipeline aislado con O_CLOEXEC + TTL + persistencia
|
||
- D: snapshot v2 + saved pipelines + log capture
|
||
- E: stderr separado + fan-out 1→N + tap→broker
|
||
- F: data plane vivo (FlowChannel con accept loop)
|
||
- G: replay buffer + templating + child_pre_exec declarativo
|
||
- H: stats memory+CPU + stop graceful + replay configurable
|
||
- I: memory.peak + pipeline stop selectivo + sparkline shell
|
||
- J: CPU% multi-core + pipeline --tail + replay por bytes
|
||
- K: cpu_cores + quota report + restart-on-failure
|
||
- L: quota enforcement + cgroup memory.max + pipeline restart
|
||
- M: backoff exponencial + quota breaches card + logs --follow
|
||
- N: drain shutdown + snapshot v3 live_pipelines + batched query
|
||
- O: collision detection sockets + stats history server-side
|
||
- P: throughput metering + stats history persistido + auth SO_PEERCRED
|
||
- Q: throughput card + rate-limit token-bucket + snapshot incremental
|
||
- R: health endpoint + audit log tracing + token bucket real
|
||
- S: audit log persistente + HTTP/JSON gateway
|
||
|
||
Pendiente. Auth en gateway (token, mTLS). Rotación de audit.log con N backups.
|
||
WIT contracts reales. shipote-shell click handler. Métricas Prometheus.
|
||
|
||
---
|
||
11 · modules/gioser/ — 2,535 LOC · ★★★★★
|
||
|
||
5 crates agnósticos (geom, physics, palette, shaders, canvas-web) + cdylib
|
||
apps/gioser-web. Landing personal con chacana 3D + tilt físico al mouse + 4 tips
|
||
elementales en Markdown.
|
||
|
||
Hecho. Operativa. Build pipeline scripts/build-gioser-web.sh. Tests sobre
|
||
geom/physics/palette puros. 0 TODOs.
|
||
|
||
---
|
||
12 · modules/pluma/ — 178 LOC · ★★★☆☆
|
||
|
||
┌──────────────────┬─────┬───────────────────────────────────────┐
|
||
│ crate │ LOC │ rol │
|
||
├──────────────────┼─────┼───────────────────────────────────────┤
|
||
│ pluma-md │ 90 │ Wrapper pulldown-cmark con AST simple │
|
||
├──────────────────┼─────┼───────────────────────────────────────┤
|
||
│ pluma-reader-web │ 88 │ Reader DOM: fetch + inject + theming │
|
||
└──────────────────┴─────┴───────────────────────────────────────┘
|
||
|
||
Pendiente. AST con inline elements (links, emphasis) accesibles desde Rust. Sin
|
||
tests (todavía).
|
||
|
||
---
|
||
13 · modules/vista/ — 530 LOC · ★★★★☆ (NUEVO HOY)
|
||
|
||
┌────────────┬─────┬───────┬────────────────────────────────────────────┐
|
||
│ crate │ LOC │ tests │ rol │
|
||
├────────────┼─────┼───────┼────────────────────────────────────────────┤
|
||
│ vista-core │ 175 │ 5/5 │ DeckState agnóstico + snap + drag decision │
|
||
├────────────┼─────┼───────┼────────────────────────────────────────────┤
|
||
│ vista-web │ 355 │ — │ Binding DOM (PointerEvent → DeckState) │
|
||
└────────────┴─────┴───────┴────────────────────────────────────────────┘
|
||
|
||
Hecho hoy. Lógica de snap (umbral 8px + bias 1.3) y máquina de estados
|
||
(pointer_down/move/end → DragOutcome) extraída a core agnóstico. vista-web pasa
|
||
a binding fino. Reusable en backends no-web.
|
||
|
||
---
|
||
14 · modules/barra/ — 280 LOC · ★★★★☆ (NUEVO HOY)
|
||
|
||
┌────────────┬─────┬───────┬─────────────────────────────────────────────┐
|
||
│ crate │ LOC │ tests │ rol │
|
||
├────────────┼─────┼───────┼─────────────────────────────────────────────┤
|
||
│ barra-core │ 90 │ 5/5 │ Task + render_html + sanitize + escape │
|
||
├────────────┼─────┼───────┼─────────────────────────────────────────────┤
|
||
│ barra-web │ 190 │ — │ Mount sobre <ul> + click delegate + centers │
|
||
└────────────┴─────┴───────┴─────────────────────────────────────────────┘
|
||
|
||
Hecho hoy. Modelo Task + render HTML puro extraído a core. barra-web mantiene
|
||
mount/click/lookups DOM intrínsecos.
|
||
|
||
---
|
||
15 · modules/cosmobiologia/ — 21,502 LOC · ★★★☆☆
|
||
|
||
Crate más grande del monorepo. 11 sub-crates.
|
||
|
||
┌──────────────────────────────────┬────────┬─────────┬───────┐
|
||
│ crate │ LOC │ tests │ TODOs │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ cosmobiologia-canvas │ 2,850 │ no │ — │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ cosmobiologia-engine │ 2,687 │ sí │ 12 │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ cosmobiologia-tree │ 2,295 │ no │ — │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ cosmobiologia-render │ 1,474 │ sí │ — │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ cosmobiologia-panel │ 1,037 │ sí │ — │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ cosmobiologia-modules │ 955 │ — │ — │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ cosmobiologia-store │ 760 │ sí │ — │
|
||
├──────────────────────────────────┼────────┼─────────┼───────┤
|
||
│ (resto: model, theme, card, web) │ ~1,000 │ parcial │ — │
|
||
└──────────────────────────────────┴────────┴─────────┴───────┘
|
||
|
||
Hecho. Render agnóstico (DrawCommand + compose_wheel) con dos backends: GPUI
|
||
nativo + WASM SVG. App standalone funcional. Server HTTP single-user con CRUD.
|
||
Cliente web demo SSR. Crate WASM con fallback inteligente. Compose wheel rico
|
||
(palette + dial 3D + spread + coord labels).
|
||
|
||
Pendiente (roadmap del proyecto):
|
||
|
||
┌───────┬──────────────────────────────────┬─────────────────────────┐
|
||
│ # │ área │ crates afectados │
|
||
├───────┼──────────────────────────────────┼─────────────────────────┤
|
||
│ 55-62 │ Sistema GR (8 tareas) │ engine + canvas + panel │
|
||
├───────┼──────────────────────────────────┼─────────────────────────┤
|
||
│ 63 │ FFT armónico │ engine + modules │
|
||
├───────┼──────────────────────────────────┼─────────────────────────┤
|
||
│ 64-65 │ Research bank (corpus + queries) │ store + engine │
|
||
├───────┼──────────────────────────────────┼─────────────────────────┤
|
||
│ 66 │ 3D celestial sphere │ render + canvas │
|
||
├───────┼──────────────────────────────────┼─────────────────────────┤
|
||
│ 67 │ Rectificador automático │ engine + modules │
|
||
└───────┴──────────────────────────────────┴─────────────────────────┘
|
||
|
||
---
|
||
16 · apps/ — 23 binarios
|
||
|
||
┌───────────────┬────────────────────────────────────────────────────────────┐
|
||
│ categoría │ apps │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Protocol │ brahman-broker-explorer, brahman-demo │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ │ nahual-shell, nahual-file-explorer, │
|
||
│ Nahual suite │ nahual-database-explorer, nahual-text-viewer, │
|
||
│ │ nahual-image-viewer │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Akasha │ akasha-explorer │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Nakui │ nakui-ui, nakui-explorer │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Minga │ minga-explorer │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Shuma │ shuma-daemon, shuma-cli, shuma-gateway, shuma-shell │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Pineal demos │ pineal-demo, pineal-stream-demo, pineal-phosphor-demo, │
|
||
│ │ pineal-financial-demo │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Web │ gioser-web (cdylib) │
|
||
├───────────────┼────────────────────────────────────────────────────────────┤
|
||
│ Cosmobiología │ cosmobiologia (GPUI), cosmobiologia-cli, │
|
||
│ │ cosmobiologia-server │
|
||
└───────────────┴────────────────────────────────────────────────────────────┘
|
||
|
||
---
|
||
17 · Tooling y artefactos cross-cutting
|
||
|
||
scripts/
|
||
├── reorg.py ← migración monorepo (hoy)
|
||
├── split-changelog.py ← partición CHANGELOG (hoy)
|
||
├── bootstrap-demo.sh ← escenario reproducible
|
||
├── build-arje-initrd.sh ← initramfs CPIO+gzip musl-static
|
||
├── build-gioser-web.sh ← WASM + wasm-bindgen
|
||
├── install-arje-as-init.sh, uninstall-arje.sh
|
||
└── run-arje-qemu.sh
|
||
|
||
seeds/
|
||
├── arje-minimal.card.json ← shell bare
|
||
├── arje-host.card.json ← full host (13 sub-cards)
|
||
└── arje-prod.card.json ← 15 sub-cards prod (tmpfiles, binfmt, daemons,
|
||
getty)
|
||
|
||
docs/
|
||
├── STATUS.md, ROADMAP.md ← global (hoy)
|
||
├── arje-boot.md ← initrd + QEMU + bare metal
|
||
├── arje-replace-systemd.md
|
||
└── changelog/ ← 7 buckets por proyecto (hoy)
|
||
|
||
---
|
||
18 · Métricas agregadas
|
||
|
||
┌───────────────────────┬────────────────────────────────────────────────────┐
|
||
│ dimensión │ valor │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ Total crates │ 126 │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ Binarios [[bin]] │ 35 │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ Librerías │ 89 │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ cdylib (WASM) │ 2 (gioser-web, cosmobiologia-web) │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ LOC totales │ ~78,000 │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ Crates con tests │ 65 / 126 (52%) — esperable, compat shims sin tests │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ TODOs/FIXMEs/todo!() │ 155 total · 78% concentrado en 4 crates │
|
||
├───────────────────────┼────────────────────────────────────────────────────┤
|
||
│ Cobertura cargo check │ 100% (workspace verde) │
|
||
└───────────────────────┴────────────────────────────────────────────────────┘
|
||
|
||
Concentración de deuda técnica:
|
||
- cosmobiologia-engine: 12 TODOs (sistema GR, harmonics)
|
||
- ente-brain: 11 TODOs (rule engine)
|
||
- brahman-handshake: 10 TODOs (trust fase 4)
|
||
- shuma-core: 14 TODOs (supervisión avanzada)
|
||
- Otros 65 crates: 108 TODOs distribuidos
|
||
|
||
---
|
||
19 · Plan global a finalización
|
||
|
||
Orden topológico (bottom-up del stack), con dependencias declaradas.
|
||
|
||
Hito 1 · Cobertura crítica (semana 1-2)
|
||
|
||
Cierra los gaps donde el código existe pero no hay tests, antes de añadir
|
||
features sobre código no validado.
|
||
|
||
┌───────────────────────────────────────────┬───────────────┬───────────────┐
|
||
│ tarea │ crate │ desbloquea │
|
||
├───────────────────────────────────────────┼───────────────┼───────────────┤
|
||
│ Tests E2E sobre cosmobiologia-canvas │ cosmo-canvas │ confianza UI │
|
||
├───────────────────────────────────────────┼───────────────┼───────────────┤
|
||
│ Tests E2E sobre cosmobiologia-tree │ cosmo-tree │ confianza UI │
|
||
├───────────────────────────────────────────┼───────────────┼───────────────┤
|
||
│ Tests sobre akasha-core::cluster │ akasha-core │ drift │
|
||
│ (k-means) │ │ handling │
|
||
├───────────────────────────────────────────┼───────────────┼───────────────┤
|
||
│ Tests FractalSnapshot restore con stale │ ente-snapshot │ resiliencia │
|
||
│ fds │ │ │
|
||
├───────────────────────────────────────────┼───────────────┼───────────────┤
|
||
│ Tests sobre brahman-admin (único protocol │ brahman-admin │ cierre suite │
|
||
│ sin tests) │ │ │
|
||
└───────────────────────────────────────────┴───────────────┴───────────────┘
|
||
|
||
Salida: ≥1 test por crate sin cobertura actual + matriz de panics.
|
||
|
||
Hito 2 · Cerrar stubs bloqueantes (semana 2-3)
|
||
|
||
┌────────────────┬───────────────────┬───────────────────────────────┐
|
||
│ stub │ LOC actual → meta │ impacto │
|
||
├────────────────┼───────────────────┼───────────────────────────────┤
|
||
│ minga-vfs │ 2 → ~600 │ Mount FUSE de mónadas remotas │
|
||
├────────────────┼───────────────────┼───────────────────────────────┤
|
||
│ pineal-polar │ <50 → ~300 │ Coord polar funcional │
|
||
├────────────────┼───────────────────┼───────────────────────────────┤
|
||
│ pineal-heatmap │ <50 → ~250 │ Grid 2D color-mapped │
|
||
├────────────────┼───────────────────┼───────────────────────────────┤
|
||
│ pineal-treemap │ <50 → ~300 │ Rectangular treemap │
|
||
├────────────────┼───────────────────┼───────────────────────────────┤
|
||
│ pineal-flow │ <50 → ~400 │ Sankey diagrams │
|
||
├────────────────┼───────────────────┼───────────────────────────────┤
|
||
│ pineal-mesh │ <50 → ~250 │ Triangle mesh + barycentric │
|
||
└────────────────┴───────────────────┴───────────────────────────────┘
|
||
|
||
Bloqueante de minga-vfs: estabilizar tras Hito 1 (sin tests es prematuro).
|
||
|
||
Hito 3 · Cerrar TODOs concentrados (semana 3-5, paralelo)
|
||
|
||
Tres tracks independientes, paralelizables:
|
||
|
||
Track A — Brain rule engine (ente-brain, 11 TODOs)
|
||
- Evaluador completo de policies declarativas
|
||
- Observer estadístico cross-ente (Bayesian update)
|
||
- Reglas como Cards (recursión: policies son módulos)
|
||
|
||
Track B — Shuma supervisión (shuma-core, 14 TODOs)
|
||
- Auth gateway (token via env / mTLS)
|
||
- Rotación audit.log con N backups
|
||
- WIT contracts reales sobre flow types
|
||
- Métricas exportables (Prometheus endpoint)
|
||
- shipote-shell click handler
|
||
|
||
Track C — Handshake fase 4 (brahman-handshake, 10 TODOs)
|
||
- Capabilities revocables
|
||
- Trust beyond peer (delegación)
|
||
- Métricas + audit chain hacia brain
|
||
|
||
Hito 4 · Cosmobiología innovaciones (semana 4-7)
|
||
|
||
Roadmap del proyecto, 5 áreas:
|
||
|
||
1. Sistema GR (#55-#62) — dual-ring directas+conversas, scrubbing live, HUD
|
||
triggers, modo rectificación. Requiere expansión de cosmobiologia-engine +
|
||
cosmobiologia-panel.
|
||
2. FFT armónico (#63) — detección automática de ciclos en órbitas. Sobre
|
||
cosmobiologia-modules.
|
||
3. Research bank (#64-#65) — corpus de cartas + queries. Sobre
|
||
cosmobiologia-store + cosmobiologia-engine.
|
||
4. 3D celestial sphere (#66) — renderer esférico vs el 2D actual. Sobre
|
||
cosmobiologia-render + cosmobiologia-canvas.
|
||
5. Rectificador automático (#67) — ajuste de hora natal vía eventos confirmados.
|
||
Sobre cosmobiologia-engine + cosmobiologia-modules.
|
||
|
||
Hito 5 · Compat avanzado systemd (semana 5-7, paralelo a Hitos 3-4)
|
||
|
||
┌──────────────────────┬──────────────────────┬────────────────────┐
|
||
│ shim │ método pendiente │ desbloquea │
|
||
├──────────────────────┼──────────────────────┼────────────────────┤
|
||
│ ente-logind-compat │ Inhibit, Sleep hooks │ GNOME power mgmt │
|
||
├──────────────────────┼──────────────────────┼────────────────────┤
|
||
│ ente-localed-compat │ SetVariable │ apps con locale UI │
|
||
├──────────────────────┼──────────────────────┼────────────────────┤
|
||
│ ente-machined-compat │ MachineImage ops │ nspawn workflows │
|
||
└──────────────────────┴──────────────────────┴────────────────────┘
|
||
|
||
Meta: GNOME Shell arrancable sobre ente-zero sin parches.
|
||
|
||
Hito 6 · Polish + DX + onboarding (semana 7-8)
|
||
|
||
- scripts/check.sh que corra fmt + clippy + test --workspace
|
||
- Aliases legacy de binario: shipote → shuma, yahweh → nahual
|
||
- README raíz que apunte a los 16 SDDs y al ROADMAP
|
||
- Actualizar seeds/arje-*.card.json con nombres nuevos
|
||
- Pluma AST con inline elements completos
|
||
|
||
---
|
||
20 · Diagrama de dependencias del stack
|
||
|
||
┌──────────────┐
|
||
│ apps/ (23) │
|
||
└──────┬───────┘
|
||
↓
|
||
┌──────────────────────────────┐
|
||
│ modules/ (62) │
|
||
│ │
|
||
│ cosmobiologia ←──────┐ │
|
||
│ ↓ │ │
|
||
│ nahual + pineal │ │
|
||
│ ↓ │ │
|
||
│ shuma akasha nakui │ │
|
||
│ minga │ │
|
||
│ gioser pluma vista │ │
|
||
│ barra │ │
|
||
└──────────────┬────────────┬──┘
|
||
↓ │
|
||
┌─────────────┐ │
|
||
│ runtime/ │←────┘
|
||
│ bus·cas· │
|
||
│ wasm·brain │
|
||
└──────┬──────┘
|
||
↓
|
||
┌─────────────┐
|
||
│ init/ │
|
||
│ ente-zero, │
|
||
│ kernel, │
|
||
│ incarnate │
|
||
└──────┬──────┘
|
||
↓
|
||
┌─────────────────┐
|
||
│ protocol/ │
|
||
│ card·handshake· │
|
||
│ broker·sidecar │ ← TODOS dependen de esto
|
||
│ net │
|
||
└─────────────────┘
|
||
|
||
[compat/ corre en paralelo, consume bus/card]
|
||
|
||
---
|
||
21 · Cronograma global
|
||
|
||
sem 1 sem 2 sem 3 sem 4 sem 5 sem 6 sem 7 sem 8
|
||
├─Hito1──►
|
||
├─Hito2──►
|
||
├─Hito3 Track A (brain)──────────────►
|
||
├─Hito3 Track B (shuma)──────────────►
|
||
├─Hito3 Track C (handshake)──────────►
|
||
├─Hito4 (cosmo innov)─────────────────►
|
||
├─Hito5 (compat avanzado)──►
|
||
├─Hito6 (polish)─►
|
||
|
||
Solo persona: ~7-8 semanas continuas. Paralelizado (3 tracks Hito 3 + Hito 4 +
|
||
Hito 5 disjuntos): ~3-4 semanas.
|
||
|
||
---
|
||
22 · Bloqueantes críticos (vigilar)
|
||
|
||
1. minga-vfs stub → sin él el sistema de archivos de mónadas no existe → bloquea
|
||
akasha como fuente de datos integrada.
|
||
2. ente-brain rule engine parcial → sin él, la observabilidad fractal es opaca →
|
||
bloquea decisiones políticas autónomas del Init.
|
||
3. Cosmobiología canvas/tree sin tests → 5,145 LOC de UI sin red de seguridad →
|
||
cualquier refactor en GPUI es riesgoso.
|
||
4. Compat shims básicos → Inhibit/SetVariable/MachineImage faltan → GNOME no es
|
||
estable sobre arje.
|
||
|
||
---
|
||
23 · Resumen de un vistazo
|
||
|
||
┌───────────────┬─────────┬────────┬───────┬─────────────────────────────────┐
|
||
│ capa/módulo │ madurez │ LOC │ tests │ acción siguiente │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ protocol │ ★★★★☆ │ 6,260 │ sí │ fase 4 trust (Hito 3C) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ init │ ★★★★☆ │ 3,600 │ parc. │ snapshot restore tests (H1) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ runtime │ ★★★☆☆ │ 3,400 │ parc. │ brain rule engine (H3A) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ compat │ ★★★☆☆ │ 5,000 │ no │ métodos avanzados (H5) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ minga │ ★★★★☆ │ 5,091 │ sí │ vfs (H2) ◄ BLOQUEANTE │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ nahual │ ★★★★★ │ 15,968 │ E2E │ mantenimiento │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ pineal │ ★★★☆☆ │ 3,900 │ sí │ 5 stubs (H2) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ nakui │ ★★★★☆ │ 7,063 │ sí │ docs morfismos (H6) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ akasha │ ★★★☆☆ │ 4,395 │ parc. │ cluster tests (H1) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ shuma │ ★★★★☆ │ 6,907 │ sí │ auth gateway (H3B) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ gioser │ ★★★★★ │ 2,535 │ sí │ estable │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ pluma │ ★★★☆☆ │ 178 │ no │ AST inline (H6) │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ vista (HOY) │ ★★★★☆ │ 530 │ 5/5 │ estable │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ barra (HOY) │ ★★★★☆ │ 280 │ 5/5 │ estable │
|
||
├───────────────┼─────────┼────────┼───────┼─────────────────────────────────┤
|
||
│ cosmobiologia │ ★★★☆☆ │ 21,502 │ parc. │ tests canvas/tree (H1) + innov │
|
||
│ │ │ │ │ (H4) │
|
||
└───────────────┴─────────┴────────┴───────┴─────────────────────────────────┘
|
||
|
||
Trazo desde aquí: Hito 1 desbloquea Hito 2, que desbloquea Hito 3 en paralelo
|
||
con Hito 4 y Hito 5, cerrando con Hito 6 polish. Estimación realista a v1.0
|
||
estable: 6-8 semanas continuas o 3-4 semanas con paralelización agresiva.
|
||
|
||
|
||
temas de dudas (sí te dije que esa ia estaba loca en ese texto):
|
||
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.
|
||
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.
|
||
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.
|
||
|
||
del navegador:
|
||
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.
|
||
|
||
decisiones:
|
||
1. carmen.
|
||
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.
|
||
3. criu. déjalo para otro día pero no lo olvides.
|
||
4. c.
|
||
5. declarado.
|
||
6. si es forzado, no. pero cuando sea grande lo voy a querer.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
---
|
||
Nuevo PLAN_MACRO con subtareas multi-nivel
|
||
|
||
FASE A · Foundations cleanup + renames batch (sem 1-2)
|
||
├─ A1 · Rename batch en código
|
||
│ ├─ A1.1 Modificar scripts/rename-fase-a.py (add MOVES + PKG_RENAMES)
|
||
│ ├─ A1.2 Dry-run verificación
|
||
│ ├─ A1.3 Ejecutar: git mv + sed Cargo.toml + sed .rs + workspace toml
|
||
│ ├─ A1.4 cargo check --workspace verde
|
||
│ ├─ A1.5 Actualizar SDDs (init, runtime, compat → arje; revista; fana)
|
||
│ ├─ A1.6 Actualizar docs/STATUS.md, ROADMAP.md, PLAN_MACRO.md
|
||
│ ├─ A1.7 Mover
|
||
docs/changelog/{init,runtime,compat,minga,nahual,nakui,protocol}.md (referencias
|
||
internas a arje-)
|
||
│ └─ A1.8 Commit + push
|
||
│
|
||
├─ A2 · Split arje-brain en 3 sub-crates
|
||
│ ├─ A2.1 arje-brain-rules (engine + rules + dispatch — 678 LOC)
|
||
│ ├─ A2.2 arje-brain-cognitive (observer + crystallize + autopromote — 799
|
||
LOC)
|
||
│ ├─ A2.3 arje-brain-audit (audit + introspect + metrics — 1,201 LOC)
|
||
│ ├─ A2.4 arje-brain umbrella opcional (features-based) o eliminar
|
||
│ ├─ A2.5 Migrar consumidores (arje-zero, chasqui-core)
|
||
│ └─ A2.6 cargo check + commit
|
||
│
|
||
├─ A3 · Unificar loader duplicado
|
||
│ ├─ A3.1 Mover arje-brain/loader.rs → brahman-cards
|
||
│ ├─ A3.2 brahman-cards gana load_card_file + load_rules_file +
|
||
extract_*_from_json
|
||
│ ├─ A3.3 arje-brain depende de brahman-cards
|
||
│ └─ A3.4 cargo check + commit
|
||
│
|
||
├─ A4 · Extraer sandokan-lifecycle de shuma-core
|
||
│ ├─ A4.1 Crear crate runtime/sandokan-lifecycle
|
||
│ ├─ A4.2 Mover primitivas: TTL + restart backoff + quota enforce + drain +
|
||
snapshot
|
||
│ ├─ A4.3 shuma-core depende de sandokan-lifecycle como cliente
|
||
│ ├─ A4.4 Tests existentes siguen pasando
|
||
│ └─ A4.5 cargo check + commit
|
||
│
|
||
├─ A5 · Ampliar arje-incarnate con pivot_root + OverlayFS
|
||
│ ├─ A5.1 Agregar pivot_root al builder de Incarnator
|
||
│ ├─ A5.2 Agregar capa OverlayFS declarativa (rootfs RO + session RW)
|
||
│ ├─ A5.3 Tests: chroot básico funciona + overlay funciona
|
||
│ └─ A5.4 cargo check + commit
|
||
│
|
||
└─ A6 · Crear brahman-ssh-multiplex
|
||
├─ A6.1 Wrapper sobre russh
|
||
├─ A6.2 Canales paralelos + TCP_NODELAY + KeepAlive 15s
|
||
├─ A6.3 Reconexión silenciosa
|
||
├─ A6.4 Tests con servidor SSH local
|
||
└─ A6.5 cargo check + commit
|
||
|
||
FASE B · Core libraries (sem 2-5)
|
||
├─ B1 · sandokan (orquestador library)
|
||
│ ├─ B1.1 Trait Engine { run/track/telemetry }
|
||
│ ├─ B1.2 LocalEngine (in-process: arje-incarnate + arje-brain-rules +
|
||
broker)
|
||
│ ├─ B1.3 DaemonEngine (postcard sobre Unix socket)
|
||
│ ├─ B1.4 RemoteEngine (sobre brahman-ssh-multiplex + DaemonEngine remoto)
|
||
│ ├─ B1.5 Engine::auto() detecta socket y elige
|
||
│ └─ B1.6 Tests + integración con arje-zero como daemon host
|
||
│
|
||
├─ B2 · verbo (embeddings multi-backend)
|
||
│ ├─ B2.1 verbo-core (trait Provider, ModelId, EmbeddingVector)
|
||
│ ├─ B2.2 verbo-cohere (HTTP API remoto)
|
||
│ ├─ B2.3 verbo-bge-local (bge-code-large vía ort)
|
||
│ ├─ B2.4 verbo-mini-local (MiniLM-L6-v2 384d vía ort, para badu)
|
||
│ ├─ B2.5 verbo-fastembed (fallback)
|
||
│ ├─ B2.6 verbo-daemon (binario --backend X, multi-instancia)
|
||
│ ├─ B2.7 verbo-client (cliente IPC)
|
||
│ └─ B2.8 Migrar chasqui-nous-real de fastembed inline → verbo-client
|
||
│
|
||
├─ B3 · brahman-dht (library DHT agnóstica)
|
||
│ ├─ B3.1 Sobre brahman-net libp2p (kad + provider records)
|
||
│ ├─ B3.2 Trait DhtBackend con kind: Code | Card | Persona | ...
|
||
│ ├─ B3.3 Publish + lookup + announce
|
||
│ └─ B3.4 Consumido por minga-p2p (kind=Code), brahman-card-discovery
|
||
(kind=Card), agorapura (kind=Persona)
|
||
│
|
||
└─ B4 · brahman-card-discovery
|
||
├─ B4.1 Trait CardSearch + impls local (CAS + filesystem) + dht (vía
|
||
brahman-dht)
|
||
├─ B4.2 Filtros por kind, flow type, capabilities
|
||
└─ B4.3 Widget nahual/widgets/card-browser consume CardSearch
|
||
|
||
FASE C · Apps standalone (sem 4-12, paralelizables)
|
||
├─ C1 · fana (prioridad alta — absorbe pluma + nuevo writer's DAG editor)
|
||
│ ├─ C1.1 fana-core (NarrativeAtom + NarrativeGraph + CoherenceState)
|
||
│ ├─ C1.2 fana-md (absorbe pluma-md como parser markdown)
|
||
│ ├─ C1.5 fana-store (sled o RocksDB + bincode/rkyv zero-copy)
|
||
│ ├─ C1.6 fana-llm (cliente HTTP a LLMs remotos vía reqwest)
|
||
│ ├─ C1.7 fana-render-plan (DrawCommands agnósticos: editor + sidepane +
|
||
ghost trace)
|
||
│ ├─ C1.8 fana-editor-gpui (WorkspaceEditor View custom +
|
||
OscilloscopeSidepane + GhostTrace)
|
||
│ ├─ C1.9 fana-md-reader-web (absorbe pluma-reader-web, sigue siendo dep de
|
||
gioser-web)
|
||
│ ├─ C1.10 fana-editor-web (futuro WASM editor)
|
||
│ ├─ C1.11 apps/fana (binario GPUI)
|
||
│ └─ C1.12 apps/fana-web (futuro cdylib)
|
||
│
|
||
├─ C2 · badu (note-taking, ex-akashi)
|
||
├─ C3 · dominium (simulador psicológico)
|
||
├─ C4 · takiy (composición musical)
|
||
├─ C5 · matilda (server admin)
|
||
├─ C6 · mirada (compositor Wayland, ex-carmen)
|
||
└─ C7 · agorapura (identidad humana federada)
|
||
|
||
FASE D · charka (paralelo multi-mes)
|
||
FASE E · yachay (integrador, sem 12-18)
|
||
FASE F · Cobertura tests + cerrar stubs cosmo/pineal (continuo)
|
||
FASE G · Backlog (rimay, yuyay, apu, tinkuy, nutu, ...)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
cargo build -p sandokan-cli
|
||
./target/debug/sandokan daemon & # terminal/background
|
||
./target/debug/sandokan run /bin/sleep 300 # → card_id
|
||
./target/debug/sandokan list
|
||
./target/debug/sandokan status <card-id>
|
||
./target/debug/sandokan stop <card-id>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
● Comandos de prueba
|
||
|
||
target/ está en 22 GB — pero tranquilo: está gitignored, el repo git
|
||
real son 96 MB. El "desborde" es disco, no el repositorio. Más abajo
|
||
el cargo clean.
|
||
|
||
Todo de una
|
||
|
||
cargo check --workspace # compila los ~145 crates
|
||
cargo test --workspace # corre TODOS los tests (~270)
|
||
|
||
sandokan — el ejecutable interactivo
|
||
|
||
cargo build -p sandokan-cli
|
||
./target/debug/sandokan daemon & # deja el daemon
|
||
corriendo
|
||
./target/debug/sandokan run /bin/sleep 300 # imprime un card_id
|
||
./target/debug/sandokan list # lo ves activo
|
||
./target/debug/sandokan status <card-id> # → Running
|
||
./target/debug/sandokan telemetry <card-id> # → mem / nproc
|
||
./target/debug/sandokan stop <card-id> # → detenido
|
||
./target/debug/sandokan status <card-id> # → Killed
|
||
|
||
Tests por área (lo construido esta sesión)
|
||
|
||
# Fase A — foundations
|
||
cargo test -p arje-brain-rules -p arje-brain-cognitive -p
|
||
arje-brain-audit \
|
||
-p sandokan-lifecycle -p arje-incarnate
|
||
|
||
# Fase B — orquestador + discovery
|
||
cargo test -p sandokan-core -p sandokan-local -p sandokan-daemon -p sandokan \
|
||
-p brahman-dht -p brahman-card-discovery -p brahman-ssh-multiplex
|
||
|
||
# Fase F — pineal (6 charts)
|
||
cargo test -p pineal-render -p pineal-export -p pineal-heatmap \
|
||
-p pineal-polar -p pineal-treemap -p pineal-flow -p
|
||
pineal-mesh
|
||
|
||
# Apps Fase C — núcleos
|
||
cargo test -p fana-core -p fana-graph -p fana-store -p fana-semantic
|
||
# fana
|
||
cargo test -p shuma-intent
|
||
# shuma shell
|
||
cargo test -p verbo-core -p verbo-mock
|
||
# verbo
|
||
cargo test -p dominium-core
|
||
# dominium
|
||
|
||
Validación arje (boot — ya existía)
|
||
|
||
seeds/validate.sh seeds/arje-minimal.card.json
|
||
|
||
⚠ Disco — cargo clean
|
||
|
||
target/ = 22 GB y va a seguir creciendo (gpui, libp2p, russh son
|
||
pesados). Cuando quieras recuperar ese espacio:
|
||
|
||
cargo clean # borra target/ entero — recupera ~22 GB
|
||
|
||
Tras eso, el próximo cargo build recompila todo desde cero (lento,
|
||
~varios min). Recomendación: corré tus pruebas, y cuando termines una
|
||
tanda, cargo clean. No afecta nada del código ni del repo — sólo
|
||
artefactos de compilación.
|
||
|
||
¿Querés que lo corra yo ahora (cargo clean), o lo dejás para cuando
|
||
termines de probar esta tanda? Si lo corro ahora, tu próxima prueba
|
||
recompila de cero.
|
||
|
||
|
||
|
||
Lo construido — 6 módulos, 16 crates nuevos
|
||
|
||
┌───────────┬───────────────────────────────┬───────┬────────────────────────────────┐
|
||
│ módulo │ crates │ tests │ estado │
|
||
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
|
||
│ dominium │ render-plan, canvas-gpui, app │ 37 │ ✅ completo │
|
||
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
|
||
│ verbo │ verbo-daemon │ 8 │ ✅ daemon entre-procesos │
|
||
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
|
||
│ fana │ render-plan, editor-gpui, app │ 12 │ ✅ editor DAG (prioridad alta) │
|
||
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
|
||
│ agorapura │ core, graph, app │ 22 │ ✅ identidad federada │
|
||
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
|
||
│ badu │ core, gravity, app │ 29 │ núcleo + demo │
|
||
├───────────┼───────────────────────────────┼───────┼────────────────────────────────┤
|
||
│ takiy │ takiy-core │ 24 │ núcleo de teoría musical │
|
||
└───────────┴───────────────────────────────┴───────┴────────────────────────────────┘
|
||
|
||
132 tests nuevos, todos verdes. cargo check --workspace verde en cada commit. 14 commits pusheados.
|
||
|
||
Para que verifiques tú (apps GPUI — no las puedo ver)
|
||
|
||
cargo run -p dominium # simulador isométrico vivo
|
||
cargo run -p fana # editor DAG — «Mutar raíz» dispara la onda de choque
|
||
cargo run -p shuma-shell # el shell de 3 zonas
|
||
|
||
Ya verifiqué yo (CLI, corren bien)
|
||
|
||
cargo run -p agorapura # Venezuela atestigua a Yumaira; firma falsa rechazada; veredictos por política
|
||
cargo run -p badu # cuaderno: grafo de enlaces + clústeres por gravedad semántica
|
||
|
||
|
||
Verificación
|
||
|
||
Apps GPUI — necesito que las veas tú:
|
||
cargo run -p dominium # simulador isométrico vivo
|
||
cargo run -p fana # editor DAG — «Mutar raíz» dispara la onda de choque
|
||
cargo run -p shuma-shell # el shell de 3 zonas
|
||
|
||
Demos CLI — ya las verifiqué yo, corren bien:
|
||
cargo run -p agorapura # Venezuela atestigua a Yumaira; veredictos por política
|
||
cargo run -p badu # cuaderno: grafo de enlaces + clústeres por gravedad
|
||
cargo run -p matilda # inventario → docker-compose + nginx + plan de reconciliación
|
||
cargo run -p yachay # notebook: orden de ejecución + digest cambia al editar
|
||
|
||
|
||
|
||
|
||
matilda — el puente plan→ejecución
|
||
|
||
Avancé el módulo de server admin con matilda-apply: traduce el Plan de reconciliación a pasos concretos —los archivos a escribir y los comandos a
|
||
correr en el servidor— y a un script bash listo para ejecutar. cargo run -p matilda ahora lo imprime:
|
||
|
||
# crear contenedor «api»
|
||
docker run -d --name api --restart unless-stopped -p 9000:9000 ...
|
||
# actualizar contenedor «web»
|
||
docker rm -f web
|
||
docker run -d --name web ...
|
||
# crear vhost «api.jlsoltech.com»
|
||
cat > /etc/nginx/sites-enabled/api.jlsoltech.com.conf <<'MATILDA_EOF'
|
||
server { listen 443 ssl; ... }
|
||
MATILDA_EOF
|
||
nginx -t && nginx -s reload
|
||
|
||
|
||
|
||
|
||
1 · El ejecutable
|
||
|
||
apps/matilda ya es un ejecutable CLI completo:
|
||
cargo run -p matilda -- example > /tmp/inv.json
|
||
cargo run -p matilda -- plan /tmp/inv.json --discover
|
||
cargo run -p matilda -- apply /tmp/inv.json --host deploy@servidor
|
||
|
||
2 · Embebido en el shell — cargo run -p shuma-shell
|
||
|
||
matilda ahora es una herramienta del shell, no una app aparte. Dentro de la ventana de shuma:
|
||
|
||
:matilda plan /tmp/inv.json → tarjeta con el plan de reconciliación
|
||
:matilda script /tmp/inv.json → tarjeta con el script bash
|
||
:matilda apply /tmp/inv.json → ejecuta el script de verdad
|
||
|
||
- Reconcilia contra el estado real de la máquina (lee tus contenedores docker + sitios nginx).
|
||
- plan/script aparecen como tarjetas sintéticas en el feed.
|
||
- apply corre el script como cualquier comando: salida en streaming, captura acotada, botón de matar, acordeón — todo el aparato del shell,
|
||
gratis.
|
||
- 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.
|
||
|
||
|
||
|
||
Flujo end-to-end demoable hoy sin gráficos:
|
||
cargo run -p mirada-body --example headless -- /tmp/mirada.sock # el Cuerpo
|
||
MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada # el Cerebro
|
||
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).
|
||
|
||
|
||
|
||
El Cuerpo de verdad — mirada-compositor:
|
||
Compositor Wayland teselante real sobre smithay, con dos backends gráficos (main() elige; --winit/--drm lo fuerzan):
|
||
· winit — corre anidado, una ventana dentro de tu sesión X11/Wayland (para desarrollar sin dejar el escritorio).
|
||
· drm — corre nativo sobre una TTY, sin sesión anfitriona: toma GPU (DRM/KMS/GBM/EGL), teclado y ratón (libinput).
|
||
cargo run -p mirada-compositor # autónomo: Cerebro Desktop embebido, un solo proceso
|
||
WAYLAND_DISPLAY=wayland-1 foot # lanza clientes contra él (imprime su WAYLAND_DISPLAY al arrancar)
|
||
MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada-compositor # enlazado: la app mirada (Cerebro GPUI) decide la geometría
|
||
cargo run -p mirada-compositor -- --drm # nativo sobre TTY (MIRADA_STARTUP=foot lanza un cliente al arrancar)
|
||
Habla wl_compositor/xdg_shell/wl_shm/wl_seat/wl_data_device/xdg-decoration/zwp_linux_dmabuf; compone con GlesRenderer.
|
||
dmabuf permite clientes que pintan por GPU (apps GPUI, navegadores acelerados). Reusa mirada-body y mirada-link.
|
||
En --drm el foco sigue al puntero y clics/rueda van a la ventana debajo; el cursor toma la forma del cliente.
|
||
Cada ventana lleva un marco fino: azul la enfocada, gris las demás.
|
||
Super+arrastre mueve la ventana (botón izq.) o la redimensiona (der.) — al arrastrarla pasa a flotar.
|
||
Fuerza xdg-decoration ServerSide y no dibuja marco: las ventanas teseladas van sin barra de título.
|
||
Lanzar programas: acción spawn:<comando> del keymap (Super+Shift+Return → spawn:foot por defecto).
|
||
Lanzador de apps: mirada-launcher (escanea los .desktop, lista filtrable de terminal); atado a Super+p.
|
||
Conmutación de VT: Ctrl+Alt+Fn salta a otra TTY y vuelve sin romper la sesión (pausa DRM + libinput).
|
||
Acople del shell: una ventana con app_id "carmen.shell" se ancla en una franja al pie; el resto tesela arriba.
|
||
shuma-shell --launcher: corre como ese shell — barra compacta GPUI con la línea de comandos + barra de ventanas.
|
||
La barra de ventanas las consulta por el socket de control de carmen (ListWindows); un clic enfoca.
|
||
Clic en el estado despliega el cajón de resultados: la ventana del shell crece y carmen la ancla al pie.
|
||
Sesión: ~/.config/mirada/autostart (un comando por línea) + script session/mirada-session + carmen.desktop.
|
||
Ver crates/apps/mirada-compositor/README.md.
|
||
|
||
|
||
|
||
Atajos de teclado configurables — mirada-brain::Keymap:
|
||
El keymap vive sólo en el Cerebro; el Cuerpo nunca lo ve (sólo recibe la lista de cadenas a interceptar, GrabKeys).
|
||
Disco: RON de texto en ~/.config/mirada/keymap.ron — editable a mano, versionable, recargado en caliente (notify).
|
||
Si falta, la app escribe uno por defecto documentado; si está corrupto, avisa y usa el de por defecto sin pisarlo.
|
||
cargo run -p mirada-brain --example keymap-default # imprime el keymap por defecto en RON
|
||
Acciones como cadena estable: "focus-next", "layout:grid", "workspace:3", "spawn:foot" (DesktopAction: Display + FromStr).
|
||
Sin ejecutable configurador: el editor de texto del usuario, y la app mirada sobre el mismo API Keymap.
|
||
|
||
|
||
|
||
API de acciones — mirada-ctl + HUD interactivo:
|
||
Toda acción converge en Desktop::apply(DesktopAction); el keymap es sólo un front-end más.
|
||
mirada-ctl — control externo por CLI (estilo swaymsg/hyprctl):
|
||
mirada-ctl focus-next # cambia el foco
|
||
mirada-ctl focus-window 5 # enfoca una ventana concreta (FocusWindow: salta de escritorio si hace falta)
|
||
mirada-ctl workspace 3 # va al escritorio 3
|
||
mirada-ctl windows # lista las ventanas (id, escritorio, app, título)
|
||
mirada-ctl actions # lista las acciones disponibles
|
||
Socket de control aparte (mirada-brain::ctl: CtlRequest/CtlReply, marco postcard). Lo abre el Cerebro:
|
||
siempre la app mirada; mirada-compositor sólo en modo embebido.
|
||
HUD interactivo: en la app mirada, pips de escritorio y ventanas del lienzo son clicables.
|
||
cargo run -p mirada-brain --example headless-ctl # Cerebro sin gráficos para probar mirada-ctl
|
||
|
||
|
||
|
||
Layouts — 7 modos de teselado, intercambiables por el API:
|
||
master-stack · centered-master · spiral (espiral de Fibonacci) · grid · columns · rows · monocle
|
||
mirada-ctl layout spiral # fija un modo
|
||
mirada-ctl cycle-layout # siguiente modo (LayoutMode::next)
|
||
mirada-ctl grow-master / shrink-master # redimensiona el área maestra (Super+l / Super+h)
|
||
Atajos directos: Super+t/m/g/c/r/d/s. CenteredMaster y Spiral pensados para monitores anchos.
|
||
El motor (mirada-layout::tile) es puro y determinista; split() reparte sin perder un píxel.
|
||
|
||
|
||
|
||
nmaster + promover a maestra + smart gaps (al estilo dwm):
|
||
LayoutParams.master_count = nº de ventanas en el área maestra (MasterStack y CenteredMaster).
|
||
mirada-ctl inc-master / dec-master # Super+, / Super+. — nmaster ±1 (acotado 1..9)
|
||
mirada-ctl promote-to-master # Super+Return — la enfocada salta al puesto maestro
|
||
Smart gaps: una sola ventana va a sangre, sin margen desperdiciado.
|
||
combo_string del compositor ahora canoniza teclas con nombre (Return, Tab, F5, flechas…),
|
||
no sólo caracteres imprimibles — así Super+Return es un atajo válido del keymap.
|
||
|
||
|
||
|
||
Ventanas flotantes — toggle-float (Super+f):
|
||
La ventana enfocada sale del teselado a un rectángulo libre (centrado, 60% de pantalla);
|
||
las demás reteselan sin ella. Workspace guarda las flotantes aparte; layout() las pone al final.
|
||
WindowPlacement y BodyOp::Configure llevan floating: bool — el Cuerpo las compone por encima
|
||
(mirada-compositor ordena las flotantes al frente de la lista front-to-back).
|
||
mirada-ctl toggle-float # alterna flotante / teselada
|
||
|
||
|
||
|
||
Reglas de ventana — mirada-brain::rules:
|
||
Config declarativa en RON (~/.config/mirada/rules.ron); el Desktop la consulta en cada
|
||
WindowOpened y manda la ventana a su escritorio / la hace flotar.
|
||
Cada regla casa por subcadena de app_id y/o title (sin mayúsculas); gana la primera.
|
||
Ejemplo: (app_id: "firefox", workspace: 2) · (title: "Picture-in-Picture", floating: true)
|
||
La primera vez se escribe una plantilla con ejemplos comentados.
|
||
|
||
|
||
|
||
Pantalla completa — toggle-fullscreen (Super+Shift+f):
|
||
La ventana enfocada cubre toda la salida (sin gap), oculta al resto y se lleva el foco.
|
||
Workspace.fullscreen: Option<WindowId>; WindowPlacement/BodyOp::Configure llevan fullscreen: bool;
|
||
el Cuerpo le fija el estado xdg_toplevel Fullscreen. Alternar de nuevo restaura el teselado.
|
||
mirada-ctl toggle-fullscreen
|
||
|
||
|
||
|
||
Multi-monitor real — el Desktop tesela todas las salidas:
|
||
Cada Output muestra un escritorio distinto; relayout() las tesela todas en un solo Place.
|
||
Pedir un escritorio que ya muestra otra salida → las intercambia (ningún escritorio se ve 2 veces).
|
||
mirada-ctl focus-output-next # Super+o — mueve el foco al siguiente monitor
|
||
El foco del teclado es único: sólo la ventana enfocada de la salida enfocada.
|
||
cargo run -p mirada-brain --example headless-ctl # ahora levanta 2 salidas
|
||
|
||
|
||
|
||
Scratchpad — terminal desplegable (Super+`):
|
||
send-to-scratchpad guarda la ventana enfocada (sale del teselado, en ningún escritorio).
|
||
toggle-scratchpad la invoca flotando y centrada en el escritorio actual, o la oculta.
|
||
Una ventana del scratchpad te sigue: invocarla desde otro escritorio la trae consigo.
|
||
mirada-ctl windows la lista como «esc scratch».
|
||
|
||
|
||
|
||
Fullscreen iniciado por el cliente + HUD multi-salida:
|
||
BodyEvent::FullscreenRequest — cuando un cliente pide xdg set_fullscreen, el Cuerpo
|
||
(XdgShellHandler::fullscreen_request) avisa al Cerebro y la ventana entra a pantalla completa sola.
|
||
El lienzo de la app mirada dibuja ahora todas las salidas a escala, cada una con su marco;
|
||
en simulación, Shift+n añade un monitor más.
|
||
|
||
|
||
|
||
|
||
|