refactor(naming): A1 — ente→arje, vista→revista, pluma→fana
Rename batch de la Fase A del PLAN_MACRO:
- 25 crates ente-* → arje-* (protocol/init/runtime/compat). El linaje
arje (init Linux) queda con prefijo coherente.
- vista → revista (revista-core + revista-web).
- pluma → fana (fana-md + fana-md-reader-web). fana absorbe el linaje
markdown de pluma; será el writer DAG editor (prioridad alta).
Cambios:
- git mv de 29 crate dirs + 2 SDDs
- package/lib/bin names + path refs + imports .rs reescritos
- workspace Cargo.toml + comentarios de sección
- SDDs de init/runtime/compat/protocol actualizados a arje-
- SDD de revista + SDD de fana (reescrito: writer DAG editor)
- docs/STATUS.md, ROADMAP.md, PLAN_MACRO.md, arje-boot.md,
arje-replace-systemd.md actualizados
- docs/changelog/akasha.md → chasqui.md
scripts/rename-fase-a.py idempotente (--dry-run soportado).
cargo check --workspace verde.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
b83d40a833f70e0f2345993e1d41add5588d4544 · by sergio · (5 months ago) · parent 3fc6dcfa7 · browse the tree at this commit
Semantic delta · 2155
crates/apps/akasha-explorer/src/main.rs
crates/apps/chasqui-explorer/src/main.rs
crates/compat/arje-binfmt-compat/src/main.rs
crates/compat/arje-hostnamed-compat/src/main.rs
crates/compat/arje-journald-compat/src/journalctl.rs
crates/compat/arje-journald-compat/src/main.rs
crates/compat/arje-localed-compat/src/main.rs
crates/compat/arje-logind-compat/src/main.rs
crates/compat/arje-machined-compat/src/main.rs
crates/compat/arje-notify-compat/src/main.rs
crates/compat/arje-policy-provider/src/main.rs
crates/compat/arje-polkit-compat/src/main.rs
crates/compat/arje-resolved-compat/src/main.rs
crates/compat/arje-systemd1-compat/src/main.rs
crates/compat/arje-timedated-compat/src/main.rs
crates/compat/arje-timer-compat/src/main.rs
crates/compat/arje-tmpfiles-compat/src/main.rs
crates/compat/ente-binfmt-compat/src/main.rs
crates/compat/ente-hostnamed-compat/src/main.rs
crates/compat/ente-journald-compat/src/journalctl.rs
crates/compat/ente-journald-compat/src/main.rs
crates/compat/ente-localed-compat/src/main.rs
crates/compat/ente-logind-compat/src/main.rs
crates/compat/ente-machined-compat/src/main.rs
crates/compat/ente-notify-compat/src/main.rs
crates/compat/ente-policy-provider/src/main.rs
crates/compat/ente-polkit-compat/src/main.rs
crates/compat/ente-resolved-compat/src/main.rs
crates/compat/ente-systemd1-compat/src/main.rs
crates/compat/ente-timedated-compat/src/main.rs
crates/compat/ente-timer-compat/src/main.rs
crates/compat/ente-tmpfiles-compat/src/main.rs
crates/init/arje-incarnate/src/caps.rs
crates/init/arje-incarnate/src/cgroup.rs
crates/init/arje-incarnate/src/child.rs
crates/init/arje-incarnate/src/env.rs
crates/init/arje-incarnate/src/error.rs
crates/init/arje-incarnate/src/lib.rs
crates/init/arje-incarnate/src/namespaced.rs
crates/init/arje-incarnate/src/plain.rs
crates/init/arje-incarnate/src/pre_exec.rs
crates/init/arje-kernel/src/lib.rs
crates/init/arje-kernel/src/sigchld.rs
crates/init/arje-kernel/src/surface.rs
crates/init/arje-kernel/src/uevent.rs
crates/init/arje-snapshot/src/lib.rs
crates/init/arje-soma/src/lib.rs
crates/init/arje-zero/src/brain_glue.rs
crates/init/arje-zero/src/bus.rs
crates/init/arje-zero/src/events.rs
crates/init/arje-zero/src/graph/bus_mediator.rs
crates/init/arje-zero/src/graph/capabilities.rs
crates/init/arje-zero/src/graph/devices.rs
crates/init/arje-zero/src/graph/lifecycle.rs
crates/init/arje-zero/src/graph/mod.rs
crates/init/arje-zero/src/graph/shutdown.rs
crates/init/arje-zero/src/graph/topology.rs
crates/init/arje-zero/src/keypair_store.rs
crates/init/arje-zero/src/main.rs
crates/init/arje-zero/src/seed.rs
crates/init/ente-incarnate/src/caps.rs
crates/init/ente-incarnate/src/cgroup.rs
crates/init/ente-incarnate/src/child.rs
crates/init/ente-incarnate/src/env.rs
crates/init/ente-incarnate/src/error.rs
crates/init/ente-incarnate/src/lib.rs
crates/init/ente-incarnate/src/namespaced.rs
crates/init/ente-incarnate/src/plain.rs
crates/init/ente-incarnate/src/pre_exec.rs
crates/init/ente-kernel/src/lib.rs
crates/init/ente-kernel/src/sigchld.rs
crates/init/ente-kernel/src/surface.rs
crates/init/ente-kernel/src/uevent.rs
crates/init/ente-snapshot/src/lib.rs
crates/init/ente-soma/src/lib.rs
crates/init/ente-zero/src/brain_glue.rs
crates/init/ente-zero/src/bus.rs
crates/init/ente-zero/src/events.rs
crates/init/ente-zero/src/graph/bus_mediator.rs
crates/init/ente-zero/src/graph/capabilities.rs
crates/init/ente-zero/src/graph/devices.rs
crates/init/ente-zero/src/graph/lifecycle.rs
crates/init/ente-zero/src/graph/mod.rs
crates/init/ente-zero/src/graph/shutdown.rs
crates/init/ente-zero/src/graph/topology.rs
crates/init/ente-zero/src/keypair_store.rs
crates/init/ente-zero/src/main.rs
crates/init/ente-zero/src/seed.rs
crates/modules/akasha/card/src/lib.rs
crates/modules/akasha/card/src/query.rs
crates/modules/akasha/core/src/bin/nouser.rs
crates/modules/akasha/core/src/cluster.rs
crates/modules/akasha/core/src/db.rs
crates/modules/akasha/core/src/embed.rs
crates/modules/akasha/core/src/engine_socket.rs
crates/modules/akasha/core/src/lib.rs
crates/modules/akasha/core/src/scanner.rs
crates/modules/akasha/nous-mock/src/main.rs
crates/modules/akasha/nous-real/src/cache.rs
crates/modules/akasha/nous-real/src/embeddings.rs
crates/modules/akasha/nous-real/src/main.rs
crates/modules/akasha/nous-real/src/stub.rs
crates/modules/akasha/nous/src/lib.rs
crates/modules/chasqui/card/src/lib.rs
crates/modules/chasqui/card/src/query.rs
crates/modules/chasqui/core/src/bin/nouser.rs
crates/modules/chasqui/core/src/cluster.rs
crates/modules/chasqui/core/src/db.rs
crates/modules/chasqui/core/src/embed.rs
crates/modules/chasqui/core/src/engine_socket.rs
crates/modules/chasqui/core/src/lib.rs
crates/modules/chasqui/core/src/scanner.rs
crates/modules/chasqui/nous-mock/src/main.rs
crates/modules/chasqui/nous-real/src/cache.rs
crates/modules/chasqui/nous-real/src/embeddings.rs
crates/modules/chasqui/nous-real/src/main.rs
crates/modules/chasqui/nous-real/src/stub.rs
crates/modules/chasqui/nous/src/lib.rs
crates/modules/fana/fana-md-reader-web/src/lib.rs
crates/modules/fana/fana-md/src/lib.rs
crates/modules/pluma/pluma-md/src/lib.rs
crates/modules/pluma/pluma-reader-web/src/lib.rs
crates/modules/revista/revista-core/src/lib.rs
crates/modules/revista/revista-web/src/lib.rs
crates/modules/shuma/shuma-core/src/lib.rs
crates/modules/shuma/shuma-core/src/pipeline.rs
crates/modules/vista/vista-core/src/lib.rs
crates/modules/vista/vista-web/src/lib.rs
crates/protocol/brahman-card/src/lib.rs
crates/protocol/brahman-sidecar/src/discovery.rs
crates/runtime/arje-brain/examples/brainctl.rs
crates/runtime/arje-brain/src/audit.rs
crates/runtime/arje-brain/src/autopromote.rs
crates/runtime/arje-brain/src/crystallize.rs
crates/runtime/arje-brain/src/dispatch.rs
crates/runtime/arje-brain/src/engine.rs
crates/runtime/arje-brain/src/introspect.rs
crates/runtime/arje-brain/src/lib.rs
crates/runtime/arje-brain/src/loader.rs
crates/runtime/arje-brain/src/metrics.rs
crates/runtime/arje-brain/src/observer.rs
crates/runtime/arje-brain/src/rules.rs
crates/runtime/arje-bus/examples/busctl.rs
crates/runtime/arje-bus/src/lib.rs
crates/runtime/arje-cas/src/lib.rs
crates/runtime/arje-echo/src/lib.rs
crates/runtime/arje-echo/src/main.rs
crates/runtime/arje-wasm/src/lib.rs
crates/runtime/ente-brain/examples/brainctl.rs
crates/runtime/ente-brain/src/audit.rs
crates/runtime/ente-brain/src/autopromote.rs
crates/runtime/ente-brain/src/crystallize.rs
crates/runtime/ente-brain/src/dispatch.rs
crates/runtime/ente-brain/src/engine.rs
crates/runtime/ente-brain/src/introspect.rs
crates/runtime/ente-brain/src/lib.rs
crates/runtime/ente-brain/src/loader.rs
crates/runtime/ente-brain/src/metrics.rs
crates/runtime/ente-brain/src/observer.rs
crates/runtime/ente-brain/src/rules.rs
crates/runtime/ente-bus/examples/busctl.rs
crates/runtime/ente-bus/src/lib.rs
crates/runtime/ente-cas/src/lib.rs
crates/runtime/ente-echo/src/lib.rs
crates/runtime/ente-echo/src/main.rs
crates/runtime/ente-wasm/src/lib.rs
scripts/rename-chasqui.py
276 files · +19967 −18694
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 156af8c..c986739 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,7 @@ Histórico particionado el 2026-05-19 por proyecto/intención. Cada
archivo bajo `docs/changelog/` consolida las entradas de un
subdirectorio del workspace.
-- [`akasha`](docs/changelog/akasha.md) — 15 entradas
+- [`chasqui`](docs/changelog/chasqui.md) — 15 entradas
- [`init`](docs/changelog/init.md) — 1 entradas
- [`minga`](docs/changelog/minga.md) — 5 entradas
- [`misc`](docs/changelog/misc.md) — 2 entradas
diff --git a/Cargo.lock b/Cargo.lock
index 88352fe..225933b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -115,97 +115,6 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "akasha-card"
-version = "0.1.0"
-dependencies = [
- "brahman-card",
- "serde",
- "serde_json",
- "thiserror 2.0.18",
- "ulid",
-]
-
-[[package]]
-name = "akasha-core"
-version = "0.1.0"
-dependencies = [
- "akasha-card",
- "akasha-nous",
- "blake3",
- "brahman-card",
- "brahman-handshake",
- "brahman-sidecar",
- "notify",
- "serde",
- "serde_json",
- "shuma-discern",
- "sled",
- "tempfile",
- "thiserror 2.0.18",
- "tokio",
- "ulid",
- "walkdir",
-]
-
-[[package]]
-name = "akasha-explorer"
-version = "0.1.0"
-dependencies = [
- "akasha-card",
- "brahman-card",
- "brahman-sidecar",
- "gpui",
- "nahual-launcher",
- "nahual-theme",
- "nahual-widget-app-header",
- "nahual-widget-banner",
- "nahual-widget-card",
-]
-
-[[package]]
-name = "akasha-nous"
-version = "0.1.0"
-dependencies = [
- "serde",
- "serde_json",
- "thiserror 2.0.18",
-]
-
-[[package]]
-name = "akasha-nous-mock"
-version = "0.1.0"
-dependencies = [
- "akasha-card",
- "akasha-core",
- "akasha-nous",
- "brahman-card",
- "brahman-sidecar",
- "serde_json",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "ulid",
-]
-
-[[package]]
-name = "akasha-nous-real"
-version = "0.1.0"
-dependencies = [
- "akasha-nous",
- "brahman-card",
- "brahman-sidecar",
- "ente-cas",
- "fastembed",
- "serde_json",
- "sled",
- "tempfile",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "ulid",
-]
-
[[package]]
name = "aliasable"
version = "0.1.3"
@@ -376,6 +285,339 @@ dependencies = [
"password-hash",
]
+[[package]]
+name = "arje-binfmt-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "arje-brain"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-card",
+ "arje-cas",
+ "base64 0.22.1",
+ "bincode",
+ "postcard",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "ulid",
+]
+
+[[package]]
+name = "arje-bus"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-card",
+ "arje-echo",
+ "postcard",
+ "serde",
+ "tokio",
+ "tracing",
+ "ulid",
+]
+
+[[package]]
+name = "arje-card"
+version = "0.0.1"
+dependencies = [
+ "brahman-card",
+]
+
+[[package]]
+name = "arje-cas"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "sha2",
+ "tracing",
+]
+
+[[package]]
+name = "arje-echo"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "arje-hostnamed-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "libc",
+ "nix 0.29.0",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-incarnate"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "brahman-card",
+ "libc",
+ "nix 0.29.0",
+ "tempfile",
+ "thiserror 2.0.18",
+ "tracing",
+]
+
+[[package]]
+name = "arje-journald-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "arje-cas",
+ "libc",
+ "nix 0.29.0",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "arje-kernel"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-card",
+ "libc",
+ "nix 0.29.0",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "arje-localed-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-logind-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-machined-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-notify-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "libc",
+ "nix 0.29.0",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "arje-policy-provider"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "arje-polkit-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-resolved-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "libc",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-snapshot"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-card",
+ "serde",
+ "serde_json",
+ "ulid",
+]
+
+[[package]]
+name = "arje-soma"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "arje-incarnate",
+ "nix 0.29.0",
+ "tracing",
+]
+
+[[package]]
+name = "arje-systemd1-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-timedated-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "zbus 4.4.0",
+]
+
+[[package]]
+name = "arje-timer-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-bus",
+ "arje-card",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "ulid",
+]
+
+[[package]]
+name = "arje-tmpfiles-compat"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "libc",
+ "nix 0.29.0",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "arje-wasm"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-card",
+ "tracing",
+ "ulid",
+ "wasmi",
+ "wat",
+]
+
+[[package]]
+name = "arje-zero"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "arje-brain",
+ "arje-bus",
+ "arje-card",
+ "arje-cas",
+ "arje-echo",
+ "arje-kernel",
+ "arje-snapshot",
+ "arje-soma",
+ "arje-wasm",
+ "brahman-admin",
+ "brahman-broker",
+ "brahman-handshake",
+ "brahman-net",
+ "libc",
+ "nix 0.29.0",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "ulid",
+]
+
[[package]]
name = "arraydeque"
version = "0.5.1"
@@ -1438,8 +1680,8 @@ dependencies = [
name = "brahman-cards"
version = "0.1.0"
dependencies = [
- "akasha-card",
"brahman-card",
+ "chasqui-card",
"nahual-meta-schema",
"nickel-lang",
"serde",
@@ -1798,6 +2040,97 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "chasqui-card"
+version = "0.1.0"
+dependencies = [
+ "brahman-card",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.18",
+ "ulid",
+]
+
+[[package]]
+name = "chasqui-core"
+version = "0.1.0"
+dependencies = [
+ "blake3",
+ "brahman-card",
+ "brahman-handshake",
+ "brahman-sidecar",
+ "chasqui-card",
+ "chasqui-nous",
+ "notify",
+ "serde",
+ "serde_json",
+ "shuma-discern",
+ "sled",
+ "tempfile",
+ "thiserror 2.0.18",
+ "tokio",
+ "ulid",
+ "walkdir",
+]
+
+[[package]]
+name = "chasqui-explorer"
+version = "0.1.0"
+dependencies = [
+ "brahman-card",
+ "brahman-sidecar",
+ "chasqui-card",
+ "gpui",
+ "nahual-launcher",
+ "nahual-theme",
+ "nahual-widget-app-header",
+ "nahual-widget-banner",
+ "nahual-widget-card",
+]
+
+[[package]]
+name = "chasqui-nous"
+version = "0.1.0"
+dependencies = [
+ "serde",
+ "serde_json",
+ "thiserror 2.0.18",
+]
+
+[[package]]
+name = "chasqui-nous-mock"
+version = "0.1.0"
+dependencies = [
+ "brahman-card",
+ "brahman-sidecar",
+ "chasqui-card",
+ "chasqui-core",
+ "chasqui-nous",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "ulid",
+]
+
+[[package]]
+name = "chasqui-nous-real"
+version = "0.1.0"
+dependencies = [
+ "arje-cas",
+ "brahman-card",
+ "brahman-sidecar",
+ "chasqui-nous",
+ "fastembed",
+ "serde_json",
+ "sled",
+ "tempfile",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "ulid",
+]
+
[[package]]
name = "chrono"
version = "0.4.44"
@@ -3013,486 +3346,153 @@ checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
[[package]]
name = "dtoa-short"
version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
-dependencies = [
- "dtoa",
-]
-
-[[package]]
-name = "dtor"
-version = "0.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97cbdf2ad6846025e8e25df05171abfb30e3ababa12ee0a0e44b9bbe570633a8"
-dependencies = [
- "dtor-proc-macro",
-]
-
-[[package]]
-name = "dtor-proc-macro"
-version = "0.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7454e41ff9012c00d53cf7f475c5e3afa3b91b7c90568495495e8d9bf47a1055"
-
-[[package]]
-name = "dunce"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
-
-[[package]]
-name = "dwrote"
-version = "0.11.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02"
-dependencies = [
- "lazy_static",
- "libc",
- "winapi",
- "wio",
-]
-
-[[package]]
-name = "dyn-clone"
-version = "1.0.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
-
-[[package]]
-name = "earcutr"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01"
-dependencies = [
- "itertools 0.11.0",
- "num-traits",
-]
-
-[[package]]
-name = "ed25519"
-version = "2.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
-dependencies = [
- "pkcs8",
- "signature",
-]
-
-[[package]]
-name = "ed25519-dalek"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"
-dependencies = [
- "curve25519-dalek",
- "ed25519",
- "serde",
- "sha2",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "either"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
-
-[[package]]
-name = "embed-resource"
-version = "3.0.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c31a88c8d26de40ed18fe748c547845aa39de1db3afd958f8cb91579f3644bcb"
-dependencies = [
- "cc",
- "memchr",
- "rustc_version",
- "toml 1.1.2+spec-1.1.0",
- "vswhom",
- "winreg",
-]
-
-[[package]]
-name = "embedded-io"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
-
-[[package]]
-name = "embedded-io"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
-
-[[package]]
-name = "ena"
-version = "0.14.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1"
-dependencies = [
- "log",
-]
-
-[[package]]
-name = "encode_unicode"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
-
-[[package]]
-name = "encoding_rs"
-version = "0.8.35"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "endi"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
-
-[[package]]
-name = "endian-type"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
-
-[[package]]
-name = "ente-binfmt-compat"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "tracing",
- "tracing-subscriber",
-]
-
-[[package]]
-name = "ente-brain"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "base64 0.22.1",
- "bincode",
- "ente-card",
- "ente-cas",
- "postcard",
- "serde",
- "serde_json",
- "tokio",
- "tracing",
- "ulid",
-]
-
-[[package]]
-name = "ente-bus"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-card",
- "ente-echo",
- "postcard",
- "serde",
- "tokio",
- "tracing",
- "ulid",
-]
-
-[[package]]
-name = "ente-card"
-version = "0.0.1"
-dependencies = [
- "brahman-card",
-]
-
-[[package]]
-name = "ente-cas"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "sha2",
- "tracing",
-]
-
-[[package]]
-name = "ente-echo"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "tokio",
- "tracing",
- "tracing-subscriber",
-]
-
-[[package]]
-name = "ente-hostnamed-compat"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "libc",
- "nix 0.29.0",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
-]
-
-[[package]]
-name = "ente-incarnate"
-version = "0.1.0"
-dependencies = [
- "anyhow",
- "brahman-card",
- "libc",
- "nix 0.29.0",
- "tempfile",
- "thiserror 2.0.18",
- "tracing",
-]
-
-[[package]]
-name = "ente-journald-compat"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "ente-cas",
- "libc",
- "nix 0.29.0",
- "tokio",
- "tracing",
- "tracing-subscriber",
-]
-
-[[package]]
-name = "ente-kernel"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-card",
- "libc",
- "nix 0.29.0",
- "tokio",
- "tracing",
-]
-
-[[package]]
-name = "ente-localed-compat"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
+dependencies = [
+ "dtoa",
]
[[package]]
-name = "ente-logind-compat"
-version = "0.0.1"
+name = "dtor"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97cbdf2ad6846025e8e25df05171abfb30e3ababa12ee0a0e44b9bbe570633a8"
dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
+ "dtor-proc-macro",
]
[[package]]
-name = "ente-machined-compat"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
-]
+name = "dtor-proc-macro"
+version = "0.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7454e41ff9012c00d53cf7f475c5e3afa3b91b7c90568495495e8d9bf47a1055"
[[package]]
-name = "ente-notify-compat"
-version = "0.0.1"
+name = "dunce"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
+
+[[package]]
+name = "dwrote"
+version = "0.11.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02"
dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
+ "lazy_static",
"libc",
- "nix 0.29.0",
- "tokio",
- "tracing",
- "tracing-subscriber",
+ "winapi",
+ "wio",
]
[[package]]
-name = "ente-policy-provider"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "serde",
- "serde_json",
- "tokio",
- "tracing",
- "tracing-subscriber",
-]
+name = "dyn-clone"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
[[package]]
-name = "ente-polkit-compat"
-version = "0.0.1"
+name = "earcutr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01"
dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
+ "itertools 0.11.0",
+ "num-traits",
]
[[package]]
-name = "ente-resolved-compat"
-version = "0.0.1"
+name = "ed25519"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "libc",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
+ "pkcs8",
+ "signature",
]
[[package]]
-name = "ente-snapshot"
-version = "0.0.1"
+name = "ed25519-dalek"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"
dependencies = [
- "anyhow",
- "ente-card",
+ "curve25519-dalek",
+ "ed25519",
"serde",
- "serde_json",
- "ulid",
+ "sha2",
+ "subtle",
+ "zeroize",
]
[[package]]
-name = "ente-soma"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "ente-incarnate",
- "nix 0.29.0",
- "tracing",
-]
+name = "either"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
-name = "ente-systemd1-compat"
-version = "0.0.1"
+name = "embed-resource"
+version = "3.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31a88c8d26de40ed18fe748c547845aa39de1db3afd958f8cb91579f3644bcb"
dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
+ "cc",
+ "memchr",
+ "rustc_version",
+ "toml 1.1.2+spec-1.1.0",
+ "vswhom",
+ "winreg",
]
[[package]]
-name = "ente-timedated-compat"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "zbus 4.4.0",
-]
+name = "embedded-io"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
[[package]]
-name = "ente-timer-compat"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-bus",
- "ente-card",
- "serde",
- "serde_json",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "ulid",
-]
+name = "embedded-io"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
[[package]]
-name = "ente-tmpfiles-compat"
-version = "0.0.1"
+name = "ena"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1"
dependencies = [
- "anyhow",
- "libc",
- "nix 0.29.0",
- "tracing",
- "tracing-subscriber",
+ "log",
]
[[package]]
-name = "ente-wasm"
-version = "0.0.1"
-dependencies = [
- "anyhow",
- "ente-card",
- "tracing",
- "ulid",
- "wasmi",
- "wat",
-]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
[[package]]
-name = "ente-zero"
-version = "0.0.1"
+name = "encoding_rs"
+version = "0.8.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
dependencies = [
- "anyhow",
- "brahman-admin",
- "brahman-broker",
- "brahman-handshake",
- "brahman-net",
- "ente-brain",
- "ente-bus",
- "ente-card",
- "ente-cas",
- "ente-echo",
- "ente-kernel",
- "ente-snapshot",
- "ente-soma",
- "ente-wasm",
- "libc",
- "nix 0.29.0",
- "serde",
- "serde_json",
- "tempfile",
- "tokio",
- "tracing",
- "tracing-subscriber",
- "ulid",
+ "cfg-if",
]
+[[package]]
+name = "endi"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
[[package]]
name = "enum-as-inner"
version = "0.6.1"
@@ -3747,6 +3747,24 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+[[package]]
+name = "fana-md"
+version = "0.1.0"
+dependencies = [
+ "pulldown-cmark",
+]
+
+[[package]]
+name = "fana-md-reader-web"
+version = "0.1.0"
+dependencies = [
+ "fana-md",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
[[package]]
name = "fastembed"
version = "4.9.1"
@@ -4390,10 +4408,10 @@ name = "gioser-web"
version = "0.1.0"
dependencies = [
"barra-web",
+ "fana-md-reader-web",
"gioser-canvas-web",
"js-sys",
- "pluma-reader-web",
- "vista-web",
+ "revista-web",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
@@ -8624,24 +8642,6 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
-[[package]]
-name = "pluma-md"
-version = "0.1.0"
-dependencies = [
- "pulldown-cmark",
-]
-
-[[package]]
-name = "pluma-reader-web"
-version = "0.1.0"
-dependencies = [
- "js-sys",
- "pluma-md",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
[[package]]
name = "png"
version = "0.17.16"
@@ -9550,6 +9550,20 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "revista-core"
+version = "0.1.0"
+
+[[package]]
+name = "revista-web"
+version = "0.1.0"
+dependencies = [
+ "js-sys",
+ "revista-core",
+ "wasm-bindgen",
+ "web-sys",
+]
+
[[package]]
name = "rgb"
version = "0.8.53"
@@ -10512,8 +10526,8 @@ name = "shuma-core"
version = "0.1.0"
dependencies = [
"anyhow",
+ "arje-incarnate",
"brahman-card",
- "ente-incarnate",
"libc",
"nix 0.29.0",
"serde",
@@ -10532,9 +10546,9 @@ name = "shuma-daemon"
version = "0.1.0"
dependencies = [
"anyhow",
+ "arje-incarnate",
"brahman-card",
"brahman-sidecar",
- "ente-incarnate",
"libc",
"nix 0.29.0",
"shuma-card",
@@ -12530,20 +12544,6 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
-[[package]]
-name = "vista-core"
-version = "0.1.0"
-
-[[package]]
-name = "vista-web"
-version = "0.1.0"
-dependencies = [
- "js-sys",
- "vista-core",
- "wasm-bindgen",
- "web-sys",
-]
-
[[package]]
name = "vswhom"
version = "0.1.0"
diff --git a/Cargo.toml b/Cargo.toml
index 73ffac3..5fa01bf 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,43 +12,43 @@ members = [
"crates/protocol/brahman-admin",
"crates/protocol/brahman-sidecar",
"crates/protocol/brahman-net",
- "crates/protocol/ente-card",
+ "crates/protocol/arje-card",
# ============================================================
# init/ — PID 1 + encarnación Linux (arje)
# ============================================================
- "crates/init/ente-zero",
- "crates/init/ente-kernel",
- "crates/init/ente-soma",
- "crates/init/ente-snapshot",
- "crates/init/ente-incarnate",
+ "crates/init/arje-zero",
+ "crates/init/arje-kernel",
+ "crates/init/arje-soma",
+ "crates/init/arje-snapshot",
+ "crates/init/arje-incarnate",
# ============================================================
# runtime/ — Infraestructura de ejecución (bus + cas + wasm + brain)
# ============================================================
- "crates/runtime/ente-bus",
- "crates/runtime/ente-cas",
- "crates/runtime/ente-wasm",
- "crates/runtime/ente-brain",
- "crates/runtime/ente-echo",
+ "crates/runtime/arje-bus",
+ "crates/runtime/arje-cas",
+ "crates/runtime/arje-wasm",
+ "crates/runtime/arje-brain",
+ "crates/runtime/arje-echo",
# ============================================================
# compat/ — Shims D-Bus para correr software systemd-aware
# ============================================================
- "crates/compat/ente-policy-provider",
- "crates/compat/ente-logind-compat",
- "crates/compat/ente-hostnamed-compat",
- "crates/compat/ente-timedated-compat",
- "crates/compat/ente-localed-compat",
- "crates/compat/ente-journald-compat",
- "crates/compat/ente-resolved-compat",
- "crates/compat/ente-polkit-compat",
- "crates/compat/ente-machined-compat",
- "crates/compat/ente-tmpfiles-compat",
- "crates/compat/ente-systemd1-compat",
- "crates/compat/ente-notify-compat",
- "crates/compat/ente-binfmt-compat",
- "crates/compat/ente-timer-compat",
+ "crates/compat/arje-policy-provider",
+ "crates/compat/arje-logind-compat",
+ "crates/compat/arje-hostnamed-compat",
+ "crates/compat/arje-timedated-compat",
+ "crates/compat/arje-localed-compat",
+ "crates/compat/arje-journald-compat",
+ "crates/compat/arje-resolved-compat",
+ "crates/compat/arje-polkit-compat",
+ "crates/compat/arje-machined-compat",
+ "crates/compat/arje-tmpfiles-compat",
+ "crates/compat/arje-systemd1-compat",
+ "crates/compat/arje-notify-compat",
+ "crates/compat/arje-binfmt-compat",
+ "crates/compat/arje-timer-compat",
# ============================================================
# modules/semantic_dht/ (minga) — DHT semántico de código
@@ -106,13 +106,13 @@ members = [
"crates/modules/nakui/core",
# ============================================================
- # modules/akasha/ — Explorador semántico de Mónadas (era nouser)
+ # modules/chasqui/ — Explorador semántico de nómadas (ex-nouser, ex-akasha)
# ============================================================
- "crates/modules/akasha/card",
- "crates/modules/akasha/core",
- "crates/modules/akasha/nous",
- "crates/modules/akasha/nous-mock",
- "crates/modules/akasha/nous-real",
+ "crates/modules/chasqui/card",
+ "crates/modules/chasqui/core",
+ "crates/modules/chasqui/nous",
+ "crates/modules/chasqui/nous-mock",
+ "crates/modules/chasqui/nous-real",
# ============================================================
# modules/shuma/ — Runtime de espacios aislados (era shipote)
@@ -132,16 +132,16 @@ members = [
"crates/modules/gioser/gioser-canvas-web",
# ============================================================
- # modules/pluma/ — Markdown agnóstico + visor web
+ # modules/fana/ — Writer DAG editor (absorbe pluma)
# ============================================================
- "crates/modules/pluma/pluma-md",
- "crates/modules/pluma/pluma-reader-web",
+ "crates/modules/fana/fana-md",
+ "crates/modules/fana/fana-md-reader-web",
# ============================================================
- # modules/vista/ — Deck horizontal swipe (Flutter PageView)
+ # modules/revista/ — Deck horizontal swipe (Flutter PageView)
# ============================================================
- "crates/modules/vista/vista-core",
- "crates/modules/vista/vista-web",
+ "crates/modules/revista/revista-core",
+ "crates/modules/revista/revista-web",
# ============================================================
# modules/barra/ — Taskbar agnóstica estilo Windows
@@ -174,7 +174,7 @@ members = [
"crates/apps/nahual-database-explorer",
"crates/apps/nahual-text-viewer",
"crates/apps/nahual-image-viewer",
- "crates/apps/akasha-explorer",
+ "crates/apps/chasqui-explorer",
"crates/apps/nakui-explorer",
"crates/apps/nakui-ui",
"crates/apps/minga-explorer",
diff --git a/crates/apps/akasha-explorer/Cargo.toml b/crates/apps/chasqui-explorer/Cargo.toml
similarity index 87%
rename from crates/apps/akasha-explorer/Cargo.toml
rename to crates/apps/chasqui-explorer/Cargo.toml
index 3fe5ce1..8595008 100644
--- a/crates/apps/akasha-explorer/Cargo.toml
+++ b/crates/apps/chasqui-explorer/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "akasha-explorer"
+name = "chasqui-explorer"
version.workspace = true
edition.workspace = true
license.workspace = true
@@ -8,7 +8,7 @@ description = "Explorador GPUI de Mónadas: panel que descubre al daemon nouser
[dependencies]
brahman-card = { path = "../../protocol/brahman-card" }
brahman-sidecar = { path = "../../protocol/brahman-sidecar" }
-akasha-card = { path = "../../modules/akasha/card" }
+chasqui-card = { path = "../../modules/chasqui/card" }
nahual-theme = { path = "../../modules/nahual/libs/theme" }
nahual-launcher = { path = "../../modules/nahual/libs/launcher" }
nahual-widget-banner = { path = "../../modules/nahual/widgets/banner" }
@@ -17,5 +17,5 @@ nahual-widget-app-header = { path = "../../modules/nahual/widgets/app-header" }
gpui = { workspace = true }
[[bin]]
-name = "akasha-explorer"
+name = "chasqui-explorer"
path = "src/main.rs"
diff --git a/crates/apps/akasha-explorer/src/main.rs b/crates/apps/chasqui-explorer/src/main.rs
similarity index 95%
rename from crates/apps/akasha-explorer/src/main.rs
rename to crates/apps/chasqui-explorer/src/main.rs
index e9db07c..327f2aa 100644
--- a/crates/apps/akasha-explorer/src/main.rs
+++ b/crates/apps/chasqui-explorer/src/main.rs
@@ -1,8 +1,8 @@
-//! `akasha-explorer` — panel GPUI que descubre al daemon `akasha`
+//! `chasqui-explorer` — panel GPUI que descubre al daemon `chasqui`
//! vía broker brahman y muestra sus Mónadas en vivo.
//!
//! Diseño: ventana standalone que cada N segundos consulta el query
-//! socket del daemon (`akasha_core::engine_socket::client::list_monads`).
+//! socket del daemon (`chasqui_core::engine_socket::client::list_monads`).
//! El path del socket NO está hardcoded — se descubre vía
//! `brahman_sidecar::await_provider_blocking` para el flow
//! `monad-list:json`. Si el daemon cae, el socket cacheado se invalida
@@ -13,9 +13,9 @@
//!
//! Uso:
//! ```sh
-//! cargo run -p akasha-explorer
+//! cargo run -p chasqui-explorer
//! # con override del init socket (heredado de brahman-handshake):
-//! BRAHMAN_INIT_SOCKET=/tmp/init.sock cargo run -p akasha-explorer
+//! BRAHMAN_INIT_SOCKET=/tmp/init.sock cargo run -p chasqui-explorer
//! ```
use std::path::PathBuf;
@@ -25,9 +25,9 @@ use brahman_sidecar::{await_provider_blocking, build_consumer_card, ConsumerErro
use gpui::{
div, prelude::*, px, rgb, Context, IntoElement, Render, SharedString, Window,
};
-use akasha_card::query::client as query_client;
-use akasha_card::query::{transport, ListMonadsResponse, FLOW_MONAD_LIST, FLOW_TYPE_NAME};
-use akasha_card::Lens;
+use chasqui_card::query::client as query_client;
+use chasqui_card::query::{transport, ListMonadsResponse, FLOW_MONAD_LIST, FLOW_TYPE_NAME};
+use chasqui_card::Lens;
use nahual_launcher::launch_app;
use nahual_theme::Theme;
use nahual_widget_app_header::app_header;
@@ -176,7 +176,7 @@ fn resolve_socket() -> Result<(PathBuf, &'static str), String> {
/// Card con `flow.input = monad-list:json`, espera al primer
/// `MatchEvent::Available`, devuelve el `producer_service_socket`.
fn discover_via_broker() -> Result<PathBuf, ConsumerError> {
- let card = build_consumer_card("akasha-explorer", FLOW_MONAD_LIST, FLOW_TYPE_NAME);
+ let card = build_consumer_card("chasqui-explorer", FLOW_MONAD_LIST, FLOW_TYPE_NAME);
await_provider_blocking(card, DISCOVERY_TIMEOUT)
}
@@ -184,7 +184,7 @@ impl Render for Explorer {
fn render(&mut self, _w: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
// Chrome viene del Theme global; los acentos por kind
// (engine cyan, data purple) son señales semánticas del
- // dominio akasha y se mantienen locales.
+ // dominio chasqui y se mantienen locales.
let theme = Theme::global(cx).clone();
let bg = theme.bg_app.clone();
let text = theme.fg_text;
@@ -205,7 +205,7 @@ impl Render for Explorer {
.map(|w| format!(" · watching: {}", w))
.unwrap_or_default()
),
- _ => "Buscando daemon akasha vía brahman-broker…".to_string(),
+ _ => "Buscando daemon chasqui vía brahman-broker…".to_string(),
};
// Header standard via widget compartido.
diff --git a/crates/apps/gioser-web/Cargo.toml b/crates/apps/gioser-web/Cargo.toml
index 3fcd66f..c9d0cf6 100644
--- a/crates/apps/gioser-web/Cargo.toml
+++ b/crates/apps/gioser-web/Cargo.toml
@@ -11,8 +11,8 @@ crate-type = ["cdylib", "rlib"]
[dependencies]
gioser-canvas-web = { path = "../../modules/gioser/gioser-canvas-web" }
-pluma-reader-web = { path = "../../modules/pluma/pluma-reader-web" }
-vista-web = { path = "../../modules/vista/vista-web" }
+fana-md-reader-web = { path = "../../modules/fana/fana-md-reader-web" }
+revista-web = { path = "../../modules/revista/revista-web" }
barra-web = { path = "../../modules/barra/barra-web" }
wasm-bindgen.workspace = true
wasm-bindgen-futures.workspace = true
diff --git a/crates/apps/gioser-web/src/lib.rs b/crates/apps/gioser-web/src/lib.rs
index 03af2fb..9a22053 100644
--- a/crates/apps/gioser-web/src/lib.rs
+++ b/crates/apps/gioser-web/src/lib.rs
@@ -21,8 +21,8 @@ use std::rc::Rc;
use barra_web::{Task, TaskList};
use gioser_canvas_web::{tips, Renderer};
-use pluma_reader_web::Reader;
-use vista_web::Deck;
+use fana_md_reader_web::Reader;
+use revista_web::Deck;
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use web_sys::{
diff --git a/crates/apps/minga-explorer/src/main.rs b/crates/apps/minga-explorer/src/main.rs
index 2af1a92..97c4eb1 100644
--- a/crates/apps/minga-explorer/src/main.rs
+++ b/crates/apps/minga-explorer/src/main.rs
@@ -14,7 +14,7 @@
//!
//! Stack visual: nahual-theme + banner_themed + card_themed +
//! theme_switcher. Mismo patrón que `nakui-explorer` /
-//! `akasha-explorer`.
+//! `chasqui-explorer`.
//!
//! Uso:
//! ```sh
diff --git a/crates/apps/nakui-explorer/src/main.rs b/crates/apps/nakui-explorer/src/main.rs
index 479a20a..6cd1e5f 100644
--- a/crates/apps/nakui-explorer/src/main.rs
+++ b/crates/apps/nakui-explorer/src/main.rs
@@ -10,7 +10,7 @@
//! producción que va escribiendo). Sin discovery dinámico vía broker
//! brahman porque nakui hoy es CLI/library/demos, no daemon — cuando
//! se daemonice, sustituir el lector de archivo por un sidecar
-//! consumer (mismo patrón que `akasha-explorer`).
+//! consumer (mismo patrón que `chasqui-explorer`).
//!
//! ## Uso
//!
diff --git a/crates/apps/shuma-daemon/Cargo.toml b/crates/apps/shuma-daemon/Cargo.toml
index e1f0143..f7bfdc2 100644
--- a/crates/apps/shuma-daemon/Cargo.toml
+++ b/crates/apps/shuma-daemon/Cargo.toml
@@ -17,7 +17,7 @@ shuma-card = { path = "../../modules/shuma/shuma-card" }
shuma-protocol = { path = "../../modules/shuma/shuma-protocol" }
shuma-discern = { path = "../../modules/shuma/shuma-discern" }
shuma-core = { path = "../../modules/shuma/shuma-core" }
-ente-incarnate = { path = "../../init/ente-incarnate" }
+arje-incarnate = { path = "../../init/arje-incarnate" }
brahman-card = { path = "../../protocol/brahman-card" }
brahman-sidecar = { path = "../../protocol/brahman-sidecar" }
anyhow = { workspace = true }
diff --git a/crates/apps/shuma-daemon/src/main.rs b/crates/apps/shuma-daemon/src/main.rs
index 76d4a62..81c7042 100644
--- a/crates/apps/shuma-daemon/src/main.rs
+++ b/crates/apps/shuma-daemon/src/main.rs
@@ -12,7 +12,7 @@
use anyhow::Context;
use brahman_card::{Card, CardKind, Flow, Flows, Lifecycle, Payload, Supervision, TypeRef};
-use ente_incarnate::IncarnatorConfig;
+use arje_incarnate::IncarnatorConfig;
use shuma_core::WorkspaceManager;
use shuma_discern::{DiscernPipeline, Hint};
use shuma_protocol::{
diff --git a/crates/compat/SDD.md b/crates/compat/SDD.md
index 1363b23..95ddd1f 100644
--- a/crates/compat/SDD.md
+++ b/crates/compat/SDD.md
@@ -1,7 +1,7 @@
# compat/ — Shims D-Bus systemd
**Propósito.** Permitir que software systemd-aware (GNOME, KDE,
-PolicyKit, NetworkManager, etc.) corra sobre `ente-zero` sin systemd.
+PolicyKit, NetworkManager, etc.) corra sobre `arje-zero` sin systemd.
Cada shim es un binario standalone que se anuncia con un nombre
well-known D-Bus y traduce las llamadas al bus interno.
@@ -9,24 +9,24 @@ well-known D-Bus y traduce las llamadas al bus interno.
| binario | reemplaza | D-Bus name |
| --------------------------- | --------------------- | ----------------------------------- |
-| `ente-logind-compat` | systemd-logind | `org.freedesktop.login1` |
-| `ente-hostnamed-compat` | systemd-hostnamed | `org.freedesktop.hostname1` |
-| `ente-timedated-compat` | systemd-timedated | `org.freedesktop.timedate1` |
-| `ente-localed-compat` | systemd-localed | `org.freedesktop.locale1` |
-| `ente-journald-compat` | systemd-journald | `org.freedesktop.LogControl1` |
-| `ente-resolved-compat` | systemd-resolved | `org.freedesktop.resolve1` |
-| `ente-polkit-compat` | polkitd | `org.freedesktop.PolicyKit1` |
-| `ente-machined-compat` | systemd-machined | `org.freedesktop.machine1` |
-| `ente-systemd1-compat` | systemd Manager | `org.freedesktop.systemd1` |
-| `ente-notify-compat` | sd_notify socket | `/run/systemd/notify` (datagram) |
-| `ente-timer-compat` | systemd timers | (cron-like, sin D-Bus) |
-| `ente-tmpfiles-compat` | systemd-tmpfiles | (aplica tmpfiles.d al boot) |
-| `ente-binfmt-compat` | systemd-binfmt | (registra handlers binfmt_misc) |
-| `ente-policy-provider` | (interno) | provider de decisiones polkit |
+| `arje-logind-compat` | systemd-logind | `org.freedesktop.login1` |
+| `arje-hostnamed-compat` | systemd-hostnamed | `org.freedesktop.hostname1` |
+| `arje-timedated-compat` | systemd-timedated | `org.freedesktop.timedate1` |
+| `arje-localed-compat` | systemd-localed | `org.freedesktop.locale1` |
+| `arje-journald-compat` | systemd-journald | `org.freedesktop.LogControl1` |
+| `arje-resolved-compat` | systemd-resolved | `org.freedesktop.resolve1` |
+| `arje-polkit-compat` | polkitd | `org.freedesktop.PolicyKit1` |
+| `arje-machined-compat` | systemd-machined | `org.freedesktop.machine1` |
+| `arje-systemd1-compat` | systemd Manager | `org.freedesktop.systemd1` |
+| `arje-notify-compat` | sd_notify socket | `/run/systemd/notify` (datagram) |
+| `arje-timer-compat` | systemd timers | (cron-like, sin D-Bus) |
+| `arje-tmpfiles-compat` | systemd-tmpfiles | (aplica tmpfiles.d al boot) |
+| `arje-binfmt-compat` | systemd-binfmt | (registra handlers binfmt_misc) |
+| `arje-policy-provider` | (interno) | provider de decisiones polkit |
## Dependencias
-- Todos ← `zbus`, `ente-bus`, `protocol/brahman-card`. Sin tests
+- Todos ← `zbus`, `arje-bus`, `protocol/brahman-card`. Sin tests
(esperado: stubs D-Bus que delegan al bus interno).
## Patrón común
@@ -35,7 +35,7 @@ Cada shim:
1. Se conecta a `/run/brahman/bus`.
2. Reclama un well-known name vía zbus.
3. Implementa los métodos de la interfaz mínima usada por el ecosistema.
-4. Loggea eventos al audit log de `ente-brain`.
+4. Loggea eventos al audit log de `arje-brain`.
## Estado
diff --git a/crates/compat/ente-binfmt-compat/Cargo.toml b/crates/compat/arje-binfmt-compat/Cargo.toml
similarity index 81%
rename from crates/compat/ente-binfmt-compat/Cargo.toml
rename to crates/compat/arje-binfmt-compat/Cargo.toml
index f972677..df8e102 100644
--- a/crates/compat/ente-binfmt-compat/Cargo.toml
+++ b/crates/compat/arje-binfmt-compat/Cargo.toml
@@ -1,12 +1,12 @@
[package]
-name = "ente-binfmt-compat"
+name = "arje-binfmt-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-binfmt-compat"
+name = "arje-binfmt-compat"
path = "src/main.rs"
[dependencies]
diff --git a/crates/compat/ente-binfmt-compat/src/main.rs b/crates/compat/arje-binfmt-compat/src/main.rs
similarity index 98%
rename from crates/compat/ente-binfmt-compat/src/main.rs
rename to crates/compat/arje-binfmt-compat/src/main.rs
index 9789d5c..18f64ec 100644
--- a/crates/compat/ente-binfmt-compat/src/main.rs
+++ b/crates/compat/arje-binfmt-compat/src/main.rs
@@ -104,6 +104,6 @@ fn register(line: &str) -> Result<String, RegError> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_binfmt_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_binfmt_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-hostnamed-compat/Cargo.toml b/crates/compat/arje-hostnamed-compat/Cargo.toml
similarity index 72%
rename from crates/compat/ente-hostnamed-compat/Cargo.toml
rename to crates/compat/arje-hostnamed-compat/Cargo.toml
index c8545e2..5f6ac90 100644
--- a/crates/compat/ente-hostnamed-compat/Cargo.toml
+++ b/crates/compat/arje-hostnamed-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-hostnamed-compat"
+name = "arje-hostnamed-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-hostnamed-compat"
+name = "arje-hostnamed-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
nix = { workspace = true }
libc = { workspace = true }
anyhow = { workspace = true }
diff --git a/crates/compat/ente-hostnamed-compat/src/main.rs b/crates/compat/arje-hostnamed-compat/src/main.rs
similarity index 98%
rename from crates/compat/ente-hostnamed-compat/src/main.rs
rename to crates/compat/arje-hostnamed-compat/src/main.rs
index 54d861a..738aa1a 100644
--- a/crates/compat/ente-hostnamed-compat/src/main.rs
+++ b/crates/compat/arje-hostnamed-compat/src/main.rs
@@ -8,8 +8,8 @@
//! Set* methods: log + forward al bus interno (no aplicamos cambios reales
//! en el stub — un siguiente paso es persistir a /etc/* y rehash).
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::sync::Mutex;
use tokio::signal::unix::{signal, SignalKind};
use tracing::{info, warn};
@@ -311,7 +311,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa0; 16]),
+ interface: arje_card::InterfaceId([0xa0; 16]),
version: 1,
}],
};
@@ -335,6 +335,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_hostnamed_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_hostnamed_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-journald-compat/Cargo.toml b/crates/compat/arje-journald-compat/Cargo.toml
similarity index 61%
rename from crates/compat/ente-journald-compat/Cargo.toml
rename to crates/compat/arje-journald-compat/Cargo.toml
index b766b6c..bae99e5 100644
--- a/crates/compat/ente-journald-compat/Cargo.toml
+++ b/crates/compat/arje-journald-compat/Cargo.toml
@@ -1,22 +1,22 @@
[package]
-name = "ente-journald-compat"
+name = "arje-journald-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-journald-compat"
+name = "arje-journald-compat"
path = "src/main.rs"
[[bin]]
-name = "ente-journalctl"
+name = "arje-journalctl"
path = "src/journalctl.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
-ente-cas = { path = "../../runtime/ente-cas" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
+arje-cas = { path = "../../runtime/arje-cas" }
nix = { workspace = true }
libc = { workspace = true }
anyhow = { workspace = true }
diff --git a/crates/compat/ente-journald-compat/src/journalctl.rs b/crates/compat/arje-journald-compat/src/journalctl.rs
similarity index 99%
rename from crates/compat/ente-journald-compat/src/journalctl.rs
rename to crates/compat/arje-journald-compat/src/journalctl.rs
index 8164bea..5f10786 100644
--- a/crates/compat/ente-journald-compat/src/journalctl.rs
+++ b/crates/compat/arje-journald-compat/src/journalctl.rs
@@ -155,7 +155,7 @@ fn main() -> anyhow::Result<()> {
let mut out: Vec<(IndexEntry, String)> = entries.into_iter()
.filter_map(|e| {
let sha = parse_sha(&e.sha_hex)?;
- let bytes = ente_cas::resolve(&sha).ok()?;
+ let bytes = arje_cas::resolve(&sha).ok()?;
let body = String::from_utf8_lossy(&bytes).into_owned();
Some((e, body))
})
diff --git a/crates/compat/ente-journald-compat/src/main.rs b/crates/compat/arje-journald-compat/src/main.rs
similarity index 96%
rename from crates/compat/ente-journald-compat/src/main.rs
rename to crates/compat/arje-journald-compat/src/main.rs
index 620cfd2..75ef2f7 100644
--- a/crates/compat/ente-journald-compat/src/main.rs
+++ b/crates/compat/arje-journald-compat/src/main.rs
@@ -7,8 +7,8 @@
//! Para una implementación real: persistir a CAS por timestamp+sha,
//! exponer query API, indexar por unidad/usuario.
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::os::fd::{AsRawFd, OwnedFd};
use std::path::{Path, PathBuf};
use std::sync::Mutex;
@@ -127,13 +127,13 @@ fn now_ms() -> u128 {
/// `<timestamp_ms>:<source>:<unit>:<sha_hex>`. Errores se logean pero
/// no abortan — perder un mensaje no debe romper journald.
fn persist_to_cas(buf: &[u8], source: &'static str, unit: Option<&str>) {
- let sha = match ente_cas::store(buf) {
+ let sha = match arje_cas::store(buf) {
Ok(s) => s,
Err(e) => { warn!(?e, "CAS store falló"); return; }
};
let line = format!(
"{}:{}:{}:{}\n",
- now_ms(), source, unit.unwrap_or("-"), ente_cas::hex(&sha)
+ now_ms(), source, unit.unwrap_or("-"), arje_cas::hex(&sha)
);
let path = index_path();
let _guard = INDEX_FILE.lock().unwrap();
@@ -213,6 +213,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_journald_compat=info,journal=info,syslog=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_journald_compat=info,journal=info,syslog=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-localed-compat/Cargo.toml b/crates/compat/arje-localed-compat/Cargo.toml
similarity index 69%
rename from crates/compat/ente-localed-compat/Cargo.toml
rename to crates/compat/arje-localed-compat/Cargo.toml
index 9e4c0d8..12aca62 100644
--- a/crates/compat/ente-localed-compat/Cargo.toml
+++ b/crates/compat/arje-localed-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-localed-compat"
+name = "arje-localed-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-localed-compat"
+name = "arje-localed-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
anyhow = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
diff --git a/crates/compat/ente-localed-compat/src/main.rs b/crates/compat/arje-localed-compat/src/main.rs
similarity index 97%
rename from crates/compat/ente-localed-compat/src/main.rs
rename to crates/compat/arje-localed-compat/src/main.rs
index f553c54..67b4703 100644
--- a/crates/compat/ente-localed-compat/src/main.rs
+++ b/crates/compat/arje-localed-compat/src/main.rs
@@ -3,8 +3,8 @@
//! GNOME settings panel "Region & Language" llama aquí. Properties leen
//! /etc/locale.conf y /etc/vconsole.conf; setters log + forward.
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::sync::Mutex;
use tokio::signal::unix::{signal, SignalKind};
use tracing::{info, warn};
@@ -190,7 +190,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa2; 16]),
+ interface: arje_card::InterfaceId([0xa2; 16]),
version: 1,
}],
};
@@ -214,6 +214,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_localed_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_localed_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-polkit-compat/Cargo.toml b/crates/compat/arje-logind-compat/Cargo.toml
similarity index 69%
rename from crates/compat/ente-polkit-compat/Cargo.toml
rename to crates/compat/arje-logind-compat/Cargo.toml
index 66fc0b6..bdef1fb 100644
--- a/crates/compat/ente-polkit-compat/Cargo.toml
+++ b/crates/compat/arje-logind-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-polkit-compat"
+name = "arje-logind-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-polkit-compat"
+name = "arje-logind-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
anyhow = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
diff --git a/crates/compat/ente-logind-compat/src/main.rs b/crates/compat/arje-logind-compat/src/main.rs
similarity index 98%
rename from crates/compat/ente-logind-compat/src/main.rs
rename to crates/compat/arje-logind-compat/src/main.rs
index ce1736f..1cd1b9e 100644
--- a/crates/compat/ente-logind-compat/src/main.rs
+++ b/crates/compat/arje-logind-compat/src/main.rs
@@ -18,8 +18,8 @@
//! El stub responde "no hay sesiones" y "sí puedo apagar" — suficiente para
//! que GNOME complete arranque sin marcar fallo.
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::sync::atomic::{AtomicU32, Ordering};
use std::time::Duration;
use tokio::signal::unix::{signal, SignalKind};
@@ -120,7 +120,7 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_logind_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_logind_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-machined-compat/Cargo.toml b/crates/compat/arje-machined-compat/Cargo.toml
similarity index 69%
rename from crates/compat/ente-machined-compat/Cargo.toml
rename to crates/compat/arje-machined-compat/Cargo.toml
index 04cc159..043ba24 100644
--- a/crates/compat/ente-machined-compat/Cargo.toml
+++ b/crates/compat/arje-machined-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-machined-compat"
+name = "arje-machined-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-machined-compat"
+name = "arje-machined-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
anyhow = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
diff --git a/crates/compat/ente-machined-compat/src/main.rs b/crates/compat/arje-machined-compat/src/main.rs
similarity index 96%
rename from crates/compat/ente-machined-compat/src/main.rs
rename to crates/compat/arje-machined-compat/src/main.rs
index 4ad7e00..9a2551c 100644
--- a/crates/compat/ente-machined-compat/src/main.rs
+++ b/crates/compat/arje-machined-compat/src/main.rs
@@ -13,8 +13,8 @@
//! Producción real: integrar con el graph del fractal — ListMachines query
//! BusRequest::ListEntes filtrado por `card.soma.namespaces.pid`.
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::collections::HashMap;
use tokio::signal::unix::{signal, SignalKind};
use tracing::{info, warn};
@@ -157,7 +157,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa5; 16]),
+ interface: arje_card::InterfaceId([0xa5; 16]),
version: 1,
}],
};
@@ -181,6 +181,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_machined_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_machined_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-notify-compat/Cargo.toml b/crates/compat/arje-notify-compat/Cargo.toml
similarity index 68%
rename from crates/compat/ente-notify-compat/Cargo.toml
rename to crates/compat/arje-notify-compat/Cargo.toml
index c3662d9..baf0e1e 100644
--- a/crates/compat/ente-notify-compat/Cargo.toml
+++ b/crates/compat/arje-notify-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-notify-compat"
+name = "arje-notify-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-notify-compat"
+name = "arje-notify-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
nix = { workspace = true }
libc = { workspace = true }
anyhow = { workspace = true }
diff --git a/crates/compat/ente-notify-compat/src/main.rs b/crates/compat/arje-notify-compat/src/main.rs
similarity index 96%
rename from crates/compat/ente-notify-compat/src/main.rs
rename to crates/compat/arje-notify-compat/src/main.rs
index afcf275..f75c8e9 100644
--- a/crates/compat/ente-notify-compat/src/main.rs
+++ b/crates/compat/arje-notify-compat/src/main.rs
@@ -15,8 +15,8 @@
//! en el envp de cada Ente encarnado. Eso ya lo hace via build_env() —
//! aquí sólo necesitamos que el path sea coherente.
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::os::fd::{AsRawFd, OwnedFd};
use std::path::Path;
use tokio::io::unix::AsyncFd;
@@ -131,7 +131,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa7; 16]),
+ interface: arje_card::InterfaceId([0xa7; 16]),
version: 1,
}],
};
@@ -155,6 +155,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_notify_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_notify_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-policy-provider/Cargo.toml b/crates/compat/arje-policy-provider/Cargo.toml
similarity index 68%
rename from crates/compat/ente-policy-provider/Cargo.toml
rename to crates/compat/arje-policy-provider/Cargo.toml
index f035fcb..751cdd7 100644
--- a/crates/compat/ente-policy-provider/Cargo.toml
+++ b/crates/compat/arje-policy-provider/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-policy-provider"
+name = "arje-policy-provider"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-policy-provider"
+name = "arje-policy-provider"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
serde = { workspace = true }
serde_json = { workspace = true }
anyhow = { workspace = true }
diff --git a/crates/compat/ente-policy-provider/src/main.rs b/crates/compat/arje-policy-provider/src/main.rs
similarity index 98%
rename from crates/compat/ente-policy-provider/src/main.rs
rename to crates/compat/arje-policy-provider/src/main.rs
index 3777ddc..26afa88 100644
--- a/crates/compat/ente-policy-provider/src/main.rs
+++ b/crates/compat/arje-policy-provider/src/main.rs
@@ -20,8 +20,8 @@
//! }
//! ```
-use ente_bus::{BusResponse, BusServer, InvokeHandler, POLKIT_DECISION_IFACE};
-use ente_card::Capability;
+use arje_bus::{BusResponse, BusServer, InvokeHandler, POLKIT_DECISION_IFACE};
+use arje_card::Capability;
use serde::Deserialize;
use std::sync::Arc;
use tokio::signal::unix::{signal, SignalKind};
@@ -216,6 +216,6 @@ fn load_policy() -> PolicyConfig {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_policy_provider=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_policy_provider=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-logind-compat/Cargo.toml b/crates/compat/arje-polkit-compat/Cargo.toml
similarity index 69%
rename from crates/compat/ente-logind-compat/Cargo.toml
rename to crates/compat/arje-polkit-compat/Cargo.toml
index c84dbf1..eeff401 100644
--- a/crates/compat/ente-logind-compat/Cargo.toml
+++ b/crates/compat/arje-polkit-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-logind-compat"
+name = "arje-polkit-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-logind-compat"
+name = "arje-polkit-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
anyhow = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
diff --git a/crates/compat/ente-polkit-compat/src/main.rs b/crates/compat/arje-polkit-compat/src/main.rs
similarity index 98%
rename from crates/compat/ente-polkit-compat/src/main.rs
rename to crates/compat/arje-polkit-compat/src/main.rs
index 8ff4b6b..a340515 100644
--- a/crates/compat/ente-polkit-compat/src/main.rs
+++ b/crates/compat/arje-polkit-compat/src/main.rs
@@ -14,8 +14,8 @@
//! CheckAuthorization solicita un token al graph y devuelve true/false
//! según el resultado.
-use ente_bus::{BusClient, BusRequest, BusResponse, POLKIT_DECISION_IFACE, POLKIT_SERVICE_IFACE};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse, POLKIT_DECISION_IFACE, POLKIT_SERVICE_IFACE};
+use arje_card::Capability;
use std::collections::HashMap;
use tokio::signal::unix::{signal, SignalKind};
use tracing::{debug, info, warn};
@@ -259,6 +259,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_polkit_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_polkit_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-resolved-compat/Cargo.toml b/crates/compat/arje-resolved-compat/Cargo.toml
similarity index 70%
rename from crates/compat/ente-resolved-compat/Cargo.toml
rename to crates/compat/arje-resolved-compat/Cargo.toml
index ca71285..ce78e9c 100644
--- a/crates/compat/ente-resolved-compat/Cargo.toml
+++ b/crates/compat/arje-resolved-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-resolved-compat"
+name = "arje-resolved-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-resolved-compat"
+name = "arje-resolved-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
libc = { workspace = true }
anyhow = { workspace = true }
tokio = { workspace = true }
diff --git a/crates/compat/ente-resolved-compat/src/main.rs b/crates/compat/arje-resolved-compat/src/main.rs
similarity index 97%
rename from crates/compat/ente-resolved-compat/src/main.rs
rename to crates/compat/arje-resolved-compat/src/main.rs
index a103bbe..d989297 100644
--- a/crates/compat/ente-resolved-compat/src/main.rs
+++ b/crates/compat/arje-resolved-compat/src/main.rs
@@ -9,8 +9,8 @@
//! - ResolveAddress (address → name reverse)
//! - ResolveRecord (TXT/SRV/etc) — NotSupported (requiere DNS query directa)
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::net::IpAddr;
use tokio::signal::unix::{signal, SignalKind};
use tracing::{info, warn};
@@ -181,7 +181,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa3; 16]),
+ interface: arje_card::InterfaceId([0xa3; 16]),
version: 1,
}],
};
@@ -205,6 +205,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_resolved_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_resolved_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/arje-systemd1-compat/Cargo.toml b/crates/compat/arje-systemd1-compat/Cargo.toml
new file mode 100644
index 0000000..40aea04
--- /dev/null
+++ b/crates/compat/arje-systemd1-compat/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "arje-systemd1-compat"
+version = "0.0.1"
+edition.workspace = true
+license.workspace = true
+publish.workspace = true
+
+[[bin]]
+name = "arje-systemd1-compat"
+path = "src/main.rs"
+
+[dependencies]
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
+anyhow = { workspace = true }
+tokio = { workspace = true }
+tracing = { workspace = true }
+tracing-subscriber = { workspace = true }
+zbus = { version = "4", default-features = false, features = ["tokio"] }
diff --git a/crates/compat/ente-systemd1-compat/src/main.rs b/crates/compat/arje-systemd1-compat/src/main.rs
similarity index 97%
rename from crates/compat/ente-systemd1-compat/src/main.rs
rename to crates/compat/arje-systemd1-compat/src/main.rs
index 81ae1ba..aa09b22 100644
--- a/crates/compat/ente-systemd1-compat/src/main.rs
+++ b/crates/compat/arje-systemd1-compat/src/main.rs
@@ -18,8 +18,8 @@
//! - ListUnitFiles (vacío)
//! - GetVersion / Environment / Architecture (properties)
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::collections::HashMap;
use tokio::signal::unix::{signal, SignalKind};
use tracing::{info, warn};
@@ -223,7 +223,7 @@ impl SystemdManager {
}
/// Pregunta al bus interno por la lista de Entes vivos.
-async fn query_list_entes() -> Option<Vec<ente_bus::EnteInfo>> {
+async fn query_list_entes() -> Option<Vec<arje_bus::EnteInfo>> {
let mut client = match BusClient::from_env().await {
Ok(c) => c,
Err(e) => { warn!(?e, "no bus client — devuelvo vacío"); return None; }
@@ -248,7 +248,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa6; 16]),
+ interface: arje_card::InterfaceId([0xa6; 16]),
version: 1,
}],
};
@@ -272,7 +272,7 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_systemd1_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_systemd1_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/arje-timedated-compat/Cargo.toml b/crates/compat/arje-timedated-compat/Cargo.toml
new file mode 100644
index 0000000..387c37a
--- /dev/null
+++ b/crates/compat/arje-timedated-compat/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "arje-timedated-compat"
+version = "0.0.1"
+edition.workspace = true
+license.workspace = true
+publish.workspace = true
+
+[[bin]]
+name = "arje-timedated-compat"
+path = "src/main.rs"
+
+[dependencies]
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
+anyhow = { workspace = true }
+tokio = { workspace = true }
+tracing = { workspace = true }
+tracing-subscriber = { workspace = true }
+zbus = { version = "4", default-features = false, features = ["tokio"] }
diff --git a/crates/compat/ente-timedated-compat/src/main.rs b/crates/compat/arje-timedated-compat/src/main.rs
similarity index 96%
rename from crates/compat/ente-timedated-compat/src/main.rs
rename to crates/compat/arje-timedated-compat/src/main.rs
index a224c41..77d6711 100644
--- a/crates/compat/ente-timedated-compat/src/main.rs
+++ b/crates/compat/arje-timedated-compat/src/main.rs
@@ -3,8 +3,8 @@
//! GNOME settings panel "Date & Time" llama aquí. Properties read-only se
//! mapean a syscalls/lecturas del sistema; setters log + forward.
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use std::time::{SystemTime, UNIX_EPOCH};
use tokio::signal::unix::{signal, SignalKind};
use tracing::{info, warn};
@@ -153,7 +153,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa1; 16]),
+ interface: arje_card::InterfaceId([0xa1; 16]),
version: 1,
}],
};
@@ -177,6 +177,6 @@ async fn wait_for_term() -> anyhow::Result<()> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_timedated_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_timedated_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-timer-compat/Cargo.toml b/crates/compat/arje-timer-compat/Cargo.toml
similarity index 71%
rename from crates/compat/ente-timer-compat/Cargo.toml
rename to crates/compat/arje-timer-compat/Cargo.toml
index f4bcf4b..a98f7e9 100644
--- a/crates/compat/ente-timer-compat/Cargo.toml
+++ b/crates/compat/arje-timer-compat/Cargo.toml
@@ -1,17 +1,17 @@
[package]
-name = "ente-timer-compat"
+name = "arje-timer-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-timer-compat"
+name = "arje-timer-compat"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
serde = { workspace = true }
serde_json = { workspace = true }
ulid = { workspace = true }
diff --git a/crates/compat/ente-timer-compat/src/main.rs b/crates/compat/arje-timer-compat/src/main.rs
similarity index 97%
rename from crates/compat/ente-timer-compat/src/main.rs
rename to crates/compat/arje-timer-compat/src/main.rs
index f018e22..84fe3e2 100644
--- a/crates/compat/ente-timer-compat/src/main.rs
+++ b/crates/compat/arje-timer-compat/src/main.rs
@@ -31,8 +31,8 @@
//! Para el demo: log "FIRE" cada vez que el schedule matchea, sin spawn real
//! (requiere mover SpawnRequest al protocolo del bus, fuera de scope).
-use ente_bus::{BusClient, BusRequest, BusResponse};
-use ente_card::Capability;
+use arje_bus::{BusClient, BusRequest, BusResponse};
+use arje_card::Capability;
use serde::Deserialize;
use std::time::{SystemTime, UNIX_EPOCH};
use tokio::signal::unix::{signal, SignalKind};
@@ -209,7 +209,7 @@ async fn announce_to_fractal() {
if let Ok(mut client) = BusClient::from_env().await {
let req = BusRequest::Announce {
capabilities: vec![Capability::Endpoint {
- interface: ente_card::InterfaceId([0xa8; 16]),
+ interface: arje_card::InterfaceId([0xa8; 16]),
version: 1,
}],
};
@@ -223,6 +223,6 @@ async fn announce_to_fractal() {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_timer_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_timer_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-tmpfiles-compat/Cargo.toml b/crates/compat/arje-tmpfiles-compat/Cargo.toml
similarity index 83%
rename from crates/compat/ente-tmpfiles-compat/Cargo.toml
rename to crates/compat/arje-tmpfiles-compat/Cargo.toml
index b3b6123..e2d050e 100644
--- a/crates/compat/ente-tmpfiles-compat/Cargo.toml
+++ b/crates/compat/arje-tmpfiles-compat/Cargo.toml
@@ -1,12 +1,12 @@
[package]
-name = "ente-tmpfiles-compat"
+name = "arje-tmpfiles-compat"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-tmpfiles-compat"
+name = "arje-tmpfiles-compat"
path = "src/main.rs"
[dependencies]
diff --git a/crates/compat/ente-tmpfiles-compat/src/main.rs b/crates/compat/arje-tmpfiles-compat/src/main.rs
similarity index 99%
rename from crates/compat/ente-tmpfiles-compat/src/main.rs
rename to crates/compat/arje-tmpfiles-compat/src/main.rs
index 58de1c4..0c414a5 100644
--- a/crates/compat/ente-tmpfiles-compat/src/main.rs
+++ b/crates/compat/arje-tmpfiles-compat/src/main.rs
@@ -276,6 +276,6 @@ fn lookup_gid(name: &str) -> anyhow::Result<u32> {
fn init_tracing() {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_tmpfiles_compat=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_tmpfiles_compat=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
}
diff --git a/crates/compat/ente-systemd1-compat/Cargo.toml b/crates/compat/ente-systemd1-compat/Cargo.toml
deleted file mode 100644
index be7fb94..0000000
--- a/crates/compat/ente-systemd1-compat/Cargo.toml
+++ /dev/null
@@ -1,19 +0,0 @@
-[package]
-name = "ente-systemd1-compat"
-version = "0.0.1"
-edition.workspace = true
-license.workspace = true
-publish.workspace = true
-
-[[bin]]
-name = "ente-systemd1-compat"
-path = "src/main.rs"
-
-[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
-anyhow = { workspace = true }
-tokio = { workspace = true }
-tracing = { workspace = true }
-tracing-subscriber = { workspace = true }
-zbus = { version = "4", default-features = false, features = ["tokio"] }
diff --git a/crates/compat/ente-timedated-compat/Cargo.toml b/crates/compat/ente-timedated-compat/Cargo.toml
deleted file mode 100644
index f1b61fb..0000000
--- a/crates/compat/ente-timedated-compat/Cargo.toml
+++ /dev/null
@@ -1,19 +0,0 @@
-[package]
-name = "ente-timedated-compat"
-version = "0.0.1"
-edition.workspace = true
-license.workspace = true
-publish.workspace = true
-
-[[bin]]
-name = "ente-timedated-compat"
-path = "src/main.rs"
-
-[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
-anyhow = { workspace = true }
-tokio = { workspace = true }
-tracing = { workspace = true }
-tracing-subscriber = { workspace = true }
-zbus = { version = "4", default-features = false, features = ["tokio"] }
diff --git a/crates/init/SDD.md b/crates/init/SDD.md
index 3e89d01..43d9a44 100644
--- a/crates/init/SDD.md
+++ b/crates/init/SDD.md
@@ -1,6 +1,6 @@
# init/ — Init (PID 1) y encarnación Linux
-**Propósito.** `ente-zero` arranca como PID 1 del fractal. Provee el
+**Propósito.** `arje-zero` arranca como PID 1 del fractal. Provee el
bucle primordial (reap + bus + handshake), bootstrap del kernel
surface, encarnación de Cards en procesos aislados con namespaces +
cgroups, y snapshot/restore del grafo.
@@ -9,21 +9,21 @@ cgroups, y snapshot/restore del grafo.
| crate | tipo | rol |
| ---------------- | ------- | ----------------------------------------------------- |
-| `ente-zero` | binario | PID 1: reap + handshake server + bus dispatcher |
-| `ente-kernel` | lib | `bootstrap_kernel_surface`, subreaper, SIGCHLD/uevent |
-| `ente-soma` | lib | Wrapper 44 LOC sobre `ente-incarnate` (compat API) |
-| `ente-incarnate` | lib | `clone(2) + namespaces + cgroup + rlimits + cpu` |
-| `ente-snapshot` | lib | `FractalSnapshot` JSON: checkpoint del grafo Cards |
+| `arje-zero` | binario | PID 1: reap + handshake server + bus dispatcher |
+| `arje-kernel` | lib | `bootstrap_kernel_surface`, subreaper, SIGCHLD/uevent |
+| `arje-soma` | lib | Wrapper 44 LOC sobre `arje-incarnate` (compat API) |
+| `arje-incarnate` | lib | `clone(2) + namespaces + cgroup + rlimits + cpu` |
+| `arje-snapshot` | lib | `FractalSnapshot` JSON: checkpoint del grafo Cards |
## Dependencias
-- `ente-kernel` ← `nix`, `libc`, syscalls Linux puras.
-- `ente-incarnate` reusable: shuma (sandboxes) y supervisores no-PID-1.
+- `arje-kernel` ← `nix`, `libc`, syscalls Linux puras.
+- `arje-incarnate` reusable: shuma (sandboxes) y supervisores no-PID-1.
- Consume `protocol/` (handshake server, brahman-net opcional).
## Boot path
-1. Kernel pasa control → `ente-zero` arranca como `/sbin/init`.
+1. Kernel pasa control → `arje-zero` arranca como `/sbin/init`.
2. Levanta sockets: `/run/brahman/bus`, `/run/brahman/handshake`.
3. Lee `Card` semilla (`seeds/arje-{minimal,host,prod}.card.json`).
4. Para cada `genesis` child Card: `incarnate(card)` → spawn aislado.
diff --git a/crates/init/ente-incarnate/Cargo.toml b/crates/init/arje-incarnate/Cargo.toml
similarity index 96%
rename from crates/init/ente-incarnate/Cargo.toml
rename to crates/init/arje-incarnate/Cargo.toml
index 1395616..bb53a51 100644
--- a/crates/init/ente-incarnate/Cargo.toml
+++ b/crates/init/arje-incarnate/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "ente-incarnate"
+name = "arje-incarnate"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
diff --git a/crates/init/ente-incarnate/src/caps.rs b/crates/init/arje-incarnate/src/caps.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/caps.rs
rename to crates/init/arje-incarnate/src/caps.rs
diff --git a/crates/init/ente-incarnate/src/cgroup.rs b/crates/init/arje-incarnate/src/cgroup.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/cgroup.rs
rename to crates/init/arje-incarnate/src/cgroup.rs
diff --git a/crates/init/ente-incarnate/src/child.rs b/crates/init/arje-incarnate/src/child.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/child.rs
rename to crates/init/arje-incarnate/src/child.rs
diff --git a/crates/init/ente-incarnate/src/env.rs b/crates/init/arje-incarnate/src/env.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/env.rs
rename to crates/init/arje-incarnate/src/env.rs
diff --git a/crates/init/ente-incarnate/src/error.rs b/crates/init/arje-incarnate/src/error.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/error.rs
rename to crates/init/arje-incarnate/src/error.rs
diff --git a/crates/init/ente-incarnate/src/lib.rs b/crates/init/arje-incarnate/src/lib.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/lib.rs
rename to crates/init/arje-incarnate/src/lib.rs
diff --git a/crates/init/ente-incarnate/src/namespaced.rs b/crates/init/arje-incarnate/src/namespaced.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/namespaced.rs
rename to crates/init/arje-incarnate/src/namespaced.rs
diff --git a/crates/init/ente-incarnate/src/plain.rs b/crates/init/arje-incarnate/src/plain.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/plain.rs
rename to crates/init/arje-incarnate/src/plain.rs
diff --git a/crates/init/ente-incarnate/src/pre_exec.rs b/crates/init/arje-incarnate/src/pre_exec.rs
similarity index 100%
rename from crates/init/ente-incarnate/src/pre_exec.rs
rename to crates/init/arje-incarnate/src/pre_exec.rs
diff --git a/crates/init/ente-kernel/Cargo.toml b/crates/init/arje-kernel/Cargo.toml
similarity index 78%
rename from crates/init/ente-kernel/Cargo.toml
rename to crates/init/arje-kernel/Cargo.toml
index 2ef77f8..44414d2 100644
--- a/crates/init/ente-kernel/Cargo.toml
+++ b/crates/init/arje-kernel/Cargo.toml
@@ -1,12 +1,12 @@
[package]
-name = "ente-kernel"
+name = "arje-kernel"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
+arje-card = { path = "../../protocol/arje-card" }
nix = { workspace = true }
libc = { workspace = true }
tokio = { workspace = true }
diff --git a/crates/init/ente-kernel/src/lib.rs b/crates/init/arje-kernel/src/lib.rs
similarity index 100%
rename from crates/init/ente-kernel/src/lib.rs
rename to crates/init/arje-kernel/src/lib.rs
diff --git a/crates/init/ente-kernel/src/sigchld.rs b/crates/init/arje-kernel/src/sigchld.rs
similarity index 100%
rename from crates/init/ente-kernel/src/sigchld.rs
rename to crates/init/arje-kernel/src/sigchld.rs
diff --git a/crates/init/ente-kernel/src/surface.rs b/crates/init/arje-kernel/src/surface.rs
similarity index 100%
rename from crates/init/ente-kernel/src/surface.rs
rename to crates/init/arje-kernel/src/surface.rs
diff --git a/crates/init/ente-kernel/src/uevent.rs b/crates/init/arje-kernel/src/uevent.rs
similarity index 99%
rename from crates/init/ente-kernel/src/uevent.rs
rename to crates/init/arje-kernel/src/uevent.rs
index 6e8f0fd..d7ce4bd 100644
--- a/crates/init/ente-kernel/src/uevent.rs
+++ b/crates/init/arje-kernel/src/uevent.rs
@@ -5,7 +5,7 @@
//! continuar sin grafo de dispositivos.
use anyhow::Context;
-use ente_card::DeviceClass;
+use arje_card::DeviceClass;
use nix::sys::socket::{bind, socket, AddressFamily, NetlinkAddr, SockFlag, SockProtocol, SockType};
use std::collections::HashMap;
use std::os::fd::{AsRawFd, OwnedFd};
diff --git a/crates/init/ente-snapshot/Cargo.toml b/crates/init/arje-snapshot/Cargo.toml
similarity index 76%
rename from crates/init/ente-snapshot/Cargo.toml
rename to crates/init/arje-snapshot/Cargo.toml
index 38ec4dd..0af070f 100644
--- a/crates/init/ente-snapshot/Cargo.toml
+++ b/crates/init/arje-snapshot/Cargo.toml
@@ -1,12 +1,12 @@
[package]
-name = "ente-snapshot"
+name = "arje-snapshot"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
+arje-card = { path = "../../protocol/arje-card" }
serde = { workspace = true }
serde_json = { workspace = true }
ulid = { workspace = true }
diff --git a/crates/init/ente-snapshot/src/lib.rs b/crates/init/arje-snapshot/src/lib.rs
similarity index 98%
rename from crates/init/ente-snapshot/src/lib.rs
rename to crates/init/arje-snapshot/src/lib.rs
index 6eb0d1c..1e11614 100644
--- a/crates/init/ente-snapshot/src/lib.rs
+++ b/crates/init/arje-snapshot/src/lib.rs
@@ -9,7 +9,7 @@
//! - pending_invokes (en vuelo, se descartan)
//! - device presence (uevents reconstruyen el índice)
-use ente_card::EntityCard;
+use arje_card::EntityCard;
use serde::{Deserialize, Serialize};
use std::path::Path;
use ulid::Ulid;
diff --git a/crates/init/arje-soma/Cargo.toml b/crates/init/arje-soma/Cargo.toml
new file mode 100644
index 0000000..f83d82b
--- /dev/null
+++ b/crates/init/arje-soma/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "arje-soma"
+version = "0.0.1"
+edition.workspace = true
+license.workspace = true
+publish.workspace = true
+description = "Wrapper histórico sobre arje-incarnate para mantener la API set_bus_sock+incarnate que usa arje-zero. Toda la lógica vive en arje-incarnate."
+
+[dependencies]
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
+arje-incarnate = { path = "../arje-incarnate" }
+nix = { workspace = true }
+anyhow = { workspace = true }
+tracing = { workspace = true }
diff --git a/crates/init/ente-soma/src/lib.rs b/crates/init/arje-soma/src/lib.rs
similarity index 89%
rename from crates/init/ente-soma/src/lib.rs
rename to crates/init/arje-soma/src/lib.rs
index e66b32a..7d136c8 100644
--- a/crates/init/ente-soma/src/lib.rs
+++ b/crates/init/arje-soma/src/lib.rs
@@ -1,17 +1,17 @@
-//! `ente-soma` — wrapper histórico sobre [`ente_incarnate`].
+//! `ente-soma` — wrapper histórico sobre [`arje_incarnate`].
//!
//! La rutina de namespacing fue extraída a `ente-incarnate` para que
//! shuma, exploradores y cualquier supervisor no-PID-1 puedan reusarla.
//! Este crate sobrevive como compat para `ente-zero` y otros que importan
-//! `ente_soma::{set_bus_sock, incarnate}`.
+//! `arje_soma::{set_bus_sock, incarnate}`.
//!
//! Semántica preservada:
//! - `BUS_SOCK_PATH` global vía `OnceLock` (init lo setea una vez).
//! - `NOTIFY_SOCKET=/run/systemd/notify` se inyecta automáticamente.
//! - `strict_caps = false` (errores no-fatales se loguean, encarnación sigue).
-use ente_card::EntityCard;
-use ente_incarnate::{Incarnator, IncarnatorConfig};
+use arje_card::EntityCard;
+use arje_incarnate::{Incarnator, IncarnatorConfig};
use nix::unistd::Pid;
use std::path::PathBuf;
use std::sync::OnceLock;
diff --git a/crates/init/ente-zero/Cargo.toml b/crates/init/arje-zero/Cargo.toml
similarity index 66%
rename from crates/init/ente-zero/Cargo.toml
rename to crates/init/arje-zero/Cargo.toml
index 0e8e2f3..60df7ab 100644
--- a/crates/init/ente-zero/Cargo.toml
+++ b/crates/init/arje-zero/Cargo.toml
@@ -1,25 +1,25 @@
[package]
-name = "ente-zero"
+name = "arje-zero"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[[bin]]
-name = "ente-zero"
+name = "arje-zero"
path = "src/main.rs"
[dependencies]
# Lib crates del fractal — orden: contratos → infra → encarnación → orquestación
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
-ente-cas = { path = "../../runtime/ente-cas" }
-ente-kernel = { path = "../ente-kernel" }
-ente-soma = { path = "../ente-soma" }
-ente-wasm = { path = "../../runtime/ente-wasm" }
-ente-snapshot = { path = "../ente-snapshot" }
-ente-brain = { path = "../../runtime/ente-brain" }
-ente-echo = { path = "../../runtime/ente-echo" } # solo para constantes del demo
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../../runtime/arje-bus" }
+arje-cas = { path = "../../runtime/arje-cas" }
+arje-kernel = { path = "../arje-kernel" }
+arje-soma = { path = "../arje-soma" }
+arje-wasm = { path = "../../runtime/arje-wasm" }
+arje-snapshot = { path = "../arje-snapshot" }
+arje-brain = { path = "../../runtime/arje-brain" }
+arje-echo = { path = "../../runtime/arje-echo" } # solo para constantes del demo
# Brahman protocol — handshake para módulos brahman conscientes
brahman-handshake = { path = "../../protocol/brahman-handshake" }
diff --git a/crates/init/ente-zero/src/brain_glue.rs b/crates/init/arje-zero/src/brain_glue.rs
similarity index 90%
rename from crates/init/ente-zero/src/brain_glue.rs
rename to crates/init/arje-zero/src/brain_glue.rs
index 261afe5..8762ddb 100644
--- a/crates/init/ente-zero/src/brain_glue.rs
+++ b/crates/init/arje-zero/src/brain_glue.rs
@@ -1,7 +1,7 @@
//! Glue entre el bucle primordial y `ente-brain`.
//!
//! Tres responsabilidades:
-//! 1. Traducir eventos del grafo (`GraphEvent`) a `ente_brain::EventKind`
+//! 1. Traducir eventos del grafo (`GraphEvent`) a `arje_brain::EventKind`
//! + `SubjectInfo` para el observador y el motor.
//! 2. Implementar `ActionSink` para que las Acciones del cerebro tengan
//! un canal de salida hacia el grafo (Spawn → SpawnRequest, etc.).
@@ -10,8 +10,8 @@
use crate::events::GraphEvent;
use crate::graph::EnteGraph;
-use ente_brain::{ActionSink, EventKind as BrainEventKind, SubjectInfo};
-use ente_card::Capability;
+use arje_brain::{ActionSink, EventKind as BrainEventKind, SubjectInfo};
+use arje_card::Capability;
use serde::Deserialize;
use tokio::sync::mpsc;
use tracing::warn;
@@ -40,8 +40,8 @@ pub fn graph_event_to_brain<'a>(
}
GraphEvent::BusRequest { from, request, .. } => {
let kind = match request {
- ente_bus::BusRequest::Announce { .. } => BrainEventKind::BusAnnounce,
- ente_bus::BusRequest::Invoke { cap, .. } => {
+ arje_bus::BusRequest::Announce { .. } => BrainEventKind::BusAnnounce,
+ arje_bus::BusRequest::Invoke { cap, .. } => {
BrainEventKind::BusInvokeOf(cap.clone())
}
_ => BrainEventKind::BusInvoke,
@@ -83,7 +83,7 @@ pub struct GraphSink {
impl ActionSink for GraphSink {
fn spawn(&self, card_blob: &str) {
// El blob es JSON de EntityCard.
- match serde_json::from_str::<ente_card::EntityCard>(card_blob) {
+ match serde_json::from_str::<arje_card::EntityCard>(card_blob) {
Ok(card) => {
let evt = GraphEvent::SpawnRequest { card, requester: self.requester };
if self.graph_tx.try_send(evt).is_err() {
@@ -112,11 +112,11 @@ impl ActionSink for GraphSink {
/// Helper para que el grafo exponga la Card de un Ente vivo. Lo añadimos como
/// trait extension porque graph::EnteGraph mantiene `incarnated` privado.
pub trait GraphCardLookup {
- fn card_for(&self, id: &Ulid) -> Option<&ente_card::EntityCard>;
+ fn card_for(&self, id: &Ulid) -> Option<&arje_card::EntityCard>;
}
impl GraphCardLookup for EnteGraph {
- fn card_for(&self, id: &Ulid) -> Option<&ente_card::EntityCard> {
+ fn card_for(&self, id: &Ulid) -> Option<&arje_card::EntityCard> {
// Acceso vía método público que añadiremos en graph/mod.rs.
self.peek_card(id)
}
diff --git a/crates/init/ente-zero/src/bus.rs b/crates/init/arje-zero/src/bus.rs
similarity index 96%
rename from crates/init/ente-zero/src/bus.rs
rename to crates/init/arje-zero/src/bus.rs
index 6086b79..7ee3a06 100644
--- a/crates/init/ente-zero/src/bus.rs
+++ b/crates/init/arje-zero/src/bus.rs
@@ -10,7 +10,7 @@
//! escritura de su conexión y lo usa para forwardear.
use crate::events::GraphEvent;
-use ente_bus::{read_frame, write_frame, BusMessage, BusPayload, BusResponse, PeerCreds};
+use arje_bus::{read_frame, write_frame, BusMessage, BusPayload, BusResponse, PeerCreds};
use nix::sys::socket::{getsockopt, sockopt::PeerCredentials};
use std::path::PathBuf;
use tokio::net::{UnixListener, UnixStream};
@@ -19,7 +19,7 @@ use tracing::{error, info, trace, warn};
use ulid::Ulid;
pub fn default_socket_path() -> PathBuf {
- if let Ok(p) = std::env::var(ente_bus::ENV_BUS_SOCK) {
+ if let Ok(p) = std::env::var(arje_bus::ENV_BUS_SOCK) {
return p.into();
}
let runtime = std::env::var("XDG_RUNTIME_DIR")
@@ -97,7 +97,7 @@ async fn handle_conn(stream: UnixStream, graph_tx: mpsc::Sender<GraphEvent>) ->
};
match msg.payload {
BusPayload::Request(req) => {
- let is_announce = matches!(req, ente_bus::BusRequest::Announce { .. });
+ let is_announce = matches!(req, arje_bus::BusRequest::Announce { .. });
let (reply_tx, reply_rx) = oneshot::channel();
if graph_tx.send(GraphEvent::BusRequest {
peer,
diff --git a/crates/init/ente-zero/src/events.rs b/crates/init/arje-zero/src/events.rs
similarity index 95%
rename from crates/init/ente-zero/src/events.rs
rename to crates/init/arje-zero/src/events.rs
index 2102dd3..ca25915 100644
--- a/crates/init/ente-zero/src/events.rs
+++ b/crates/init/arje-zero/src/events.rs
@@ -8,8 +8,8 @@
#![allow(dead_code)]
-use ente_bus::{BusMessage, BusRequest, BusResponse, PeerCreds};
-use ente_card::{Capability, EntityCard};
+use arje_bus::{BusMessage, BusRequest, BusResponse, PeerCreds};
+use arje_card::{Capability, EntityCard};
use nix::sys::signal::Signal;
use tokio::sync::{mpsc, oneshot};
use ulid::Ulid;
diff --git a/crates/init/ente-zero/src/graph/bus_mediator.rs b/crates/init/arje-zero/src/graph/bus_mediator.rs
similarity index 99%
rename from crates/init/ente-zero/src/graph/bus_mediator.rs
rename to crates/init/arje-zero/src/graph/bus_mediator.rs
index 51d3f1a..0c90752 100644
--- a/crates/init/ente-zero/src/graph/bus_mediator.rs
+++ b/crates/init/arje-zero/src/graph/bus_mediator.rs
@@ -8,8 +8,8 @@
//! - Cleanup en cierre de conexión
use super::{EnteGraph, SERVER_SEQ_FLAG};
-use ente_bus::{BusMessage, BusPayload, BusRequest, BusResponse, EnteInfo, PeerCreds};
-use ente_card::Capability;
+use arje_bus::{BusMessage, BusPayload, BusRequest, BusResponse, EnteInfo, PeerCreds};
+use arje_card::Capability;
use tokio::sync::{mpsc, oneshot};
use tracing::{debug, info, warn};
use ulid::Ulid;
diff --git a/crates/init/ente-zero/src/graph/capabilities.rs b/crates/init/arje-zero/src/graph/capabilities.rs
similarity index 99%
rename from crates/init/ente-zero/src/graph/capabilities.rs
rename to crates/init/arje-zero/src/graph/capabilities.rs
index 9d75ae4..0d8b9d9 100644
--- a/crates/init/ente-zero/src/graph/capabilities.rs
+++ b/crates/init/arje-zero/src/graph/capabilities.rs
@@ -6,7 +6,7 @@
use super::{quota_for_capability, ttl_for_capability, EnteGraph, GrantedCapability};
use crate::events::CapabilityGrant;
-use ente_card::Capability;
+use arje_card::Capability;
use std::time::Instant;
use tokio::sync::oneshot;
use tracing::debug;
diff --git a/crates/init/ente-zero/src/graph/devices.rs b/crates/init/arje-zero/src/graph/devices.rs
similarity index 96%
rename from crates/init/ente-zero/src/graph/devices.rs
rename to crates/init/arje-zero/src/graph/devices.rs
index 9a2a189..26d81f7 100644
--- a/crates/init/ente-zero/src/graph/devices.rs
+++ b/crates/init/arje-zero/src/graph/devices.rs
@@ -3,8 +3,8 @@
use super::EnteGraph;
use crate::events::GraphEvent;
-use ente_card::{Capability, DeviceClass};
-use ente_kernel::{UAction, UEvent};
+use arje_card::{Capability, DeviceClass};
+use arje_kernel::{UAction, UEvent};
use tokio::sync::mpsc;
use tracing::{debug, info, warn};
diff --git a/crates/init/ente-zero/src/graph/lifecycle.rs b/crates/init/arje-zero/src/graph/lifecycle.rs
similarity index 93%
rename from crates/init/ente-zero/src/graph/lifecycle.rs
rename to crates/init/arje-zero/src/graph/lifecycle.rs
index 2613878..2b62825 100644
--- a/crates/init/ente-zero/src/graph/lifecycle.rs
+++ b/crates/init/arje-zero/src/graph/lifecycle.rs
@@ -5,8 +5,8 @@
use super::{EnteGraph, Incarnated};
use crate::events::{ExitStatus, GraphEvent};
-use ente_bus::{BusMessage, BusPayload, BusRequest};
-use ente_card::{Capability, EntityCard, Payload, Supervision};
+use arje_bus::{BusMessage, BusPayload, BusRequest};
+use arje_card::{Capability, EntityCard, Payload, Supervision};
use tokio::sync::mpsc;
use tracing::{info, warn};
use ulid::Ulid;
@@ -35,7 +35,7 @@ impl EnteGraph {
/// Spawn solicitado por un Ente con `Capability::Spawn`. Verifica auth,
/// requires del grafo, y delega la encarnación al backend correspondiente
- /// (`ente_soma` para procesos, `ente_wasm` para Wasm).
+ /// (`arje_soma` para procesos, `arje_wasm` para Wasm).
pub async fn authorize_and_spawn(
&mut self,
mut card: EntityCard,
@@ -64,14 +64,14 @@ impl EnteGraph {
let pid = match &card.payload {
Payload::Virtual => None,
Payload::Native { .. } | Payload::Legacy { .. } => {
- Some(ente_soma::incarnate(&card)?)
+ Some(arje_soma::incarnate(&card)?)
}
Payload::Wasm { module_sha256, entry } => {
// Wasm: hilo dedicado, sin PID. Su muerte se observa por
// estado del runtime, no por SIGCHLD.
- let bytes = ente_cas::resolve(module_sha256)
+ let bytes = arje_cas::resolve(module_sha256)
.map_err(|e| anyhow::anyhow!("CAS resolve para {}: {e}", card.label))?;
- ente_wasm::incarnate_wasm(&card, bytes, entry.clone())?;
+ arje_wasm::incarnate_wasm(&card, bytes, entry.clone())?;
None
}
};
@@ -142,7 +142,7 @@ impl EnteGraph {
seq,
payload: BusPayload::Request(BusRequest::Invoke {
cap: Capability::Endpoint {
- interface: ente_card::InterfaceId([0xde; 16]),
+ interface: arje_card::InterfaceId([0xde; 16]),
version: 1,
},
blob: blob.into_bytes(),
diff --git a/crates/init/ente-zero/src/graph/mod.rs b/crates/init/arje-zero/src/graph/mod.rs
similarity index 96%
rename from crates/init/ente-zero/src/graph/mod.rs
rename to crates/init/arje-zero/src/graph/mod.rs
index bf3409c..12b75de 100644
--- a/crates/init/ente-zero/src/graph/mod.rs
+++ b/crates/init/arje-zero/src/graph/mod.rs
@@ -16,8 +16,8 @@ mod lifecycle;
mod shutdown;
mod topology;
-use ente_bus::{BusMessage, BusResponse};
-use ente_card::{Capability, EntityCard};
+use arje_bus::{BusMessage, BusResponse};
+use arje_card::{Capability, EntityCard};
use nix::unistd::Pid;
use std::collections::{BTreeMap, BTreeSet, HashMap};
use tokio::sync::{mpsc, oneshot};
@@ -41,7 +41,7 @@ pub struct EnteGraph {
pub(in crate::graph) next_token: u64,
pub(in crate::graph) grants: HashMap<u64, GrantedCapability>,
/// Dispositivos del kernel presentes (devpath → última UEvent).
- pub(in crate::graph) devices: HashMap<String, ente_kernel::UEvent>,
+ pub(in crate::graph) devices: HashMap<String, arje_kernel::UEvent>,
/// Cards genesis pendientes de instanciar (extraídas de la Semilla).
pub(in crate::graph) pending_genesis: Vec<EntityCard>,
/// Hijos directos por lineage. parent → [child, ...].
@@ -166,14 +166,14 @@ impl EnteGraph {
/// Captura el estado live como snapshot serializable. Excluye la Semilla
/// (será re-sintetizada al restore con su seed_id preservado).
- pub fn snapshot(&self) -> ente_snapshot::FractalSnapshot {
+ pub fn snapshot(&self) -> arje_snapshot::FractalSnapshot {
let entes: Vec<EntityCard> = self.incarnated.iter()
.filter(|(id, _)| **id != self.seed.id)
.map(|(_, inc)| inc.card.clone())
.collect();
- ente_snapshot::FractalSnapshot {
- version: ente_snapshot::SNAPSHOT_VERSION,
- timestamp_ms: ente_snapshot::now_ms(),
+ arje_snapshot::FractalSnapshot {
+ version: arje_snapshot::SNAPSHOT_VERSION,
+ timestamp_ms: arje_snapshot::now_ms(),
seed_id: self.seed.id,
seed_label: self.seed.label.clone(),
entes,
diff --git a/crates/init/ente-zero/src/graph/shutdown.rs b/crates/init/arje-zero/src/graph/shutdown.rs
similarity index 100%
rename from crates/init/ente-zero/src/graph/shutdown.rs
rename to crates/init/arje-zero/src/graph/shutdown.rs
diff --git a/crates/init/ente-zero/src/graph/topology.rs b/crates/init/arje-zero/src/graph/topology.rs
similarity index 100%
rename from crates/init/ente-zero/src/graph/topology.rs
rename to crates/init/arje-zero/src/graph/topology.rs
diff --git a/crates/init/ente-zero/src/keypair_store.rs b/crates/init/arje-zero/src/keypair_store.rs
similarity index 100%
rename from crates/init/ente-zero/src/keypair_store.rs
rename to crates/init/arje-zero/src/keypair_store.rs
diff --git a/crates/init/ente-zero/src/main.rs b/crates/init/arje-zero/src/main.rs
similarity index 95%
rename from crates/init/ente-zero/src/main.rs
rename to crates/init/arje-zero/src/main.rs
index b2cab6a..d4f7932 100644
--- a/crates/init/ente-zero/src/main.rs
+++ b/crates/init/arje-zero/src/main.rs
@@ -23,8 +23,8 @@ mod keypair_store;
mod seed;
use anyhow::Context;
-use ente_brain::{BrainState, IntrospectServer};
-use ente_kernel::{become_child_subreaper, bootstrap_kernel_surface, spawn_sigchld_stream, spawn_uevent_stream};
+use arje_brain::{BrainState, IntrospectServer};
+use arje_kernel::{become_child_subreaper, bootstrap_kernel_surface, spawn_sigchld_stream, spawn_uevent_stream};
use events::{ExitStatus, GraphEvent, ShutdownReason};
use graph::EnteGraph;
use nix::errno::Errno;
@@ -106,7 +106,7 @@ fn main() -> anyhow::Result<()> {
}
async fn primordial_loop(
- seed_card: ente_card::EntityCard,
+ seed_card: arje_card::EntityCard,
dev_mode: bool,
checkpoint_path: Option<PathBuf>,
restore_path: Option<PathBuf>,
@@ -127,7 +127,7 @@ async fn primordial_loop(
Ok(rx) => rx,
Err(e) => {
warn!(?e, "uevents deshabilitados (probablemente falta CAP_NET_ADMIN)");
- let (_keep_tx, rx) = mpsc::channel::<ente_kernel::UEvent>(1);
+ let (_keep_tx, rx) = mpsc::channel::<arje_kernel::UEvent>(1);
std::mem::forget(_keep_tx);
rx
}
@@ -137,7 +137,7 @@ async fn primordial_loop(
// tenga adónde llegar. Su path se inyecta en ENTE_BUS_SOCK por soma.
let bus_sock = bus::default_socket_path();
let bus_path = bus::spawn_bus(bus_sock, graph_tx.clone())?;
- ente_soma::set_bus_sock(bus_path.to_string_lossy().into_owned());
+ arje_soma::set_bus_sock(bus_path.to_string_lossy().into_owned());
// Brahman protocol: handshake socket + broker compartido.
//
@@ -285,7 +285,7 @@ async fn primordial_loop(
// Umbrales relajados para que el demo (pocos eventos) produzca
// cristales observables. Con P(b|a) normalizada a [0,1], los
// valores típicos en muestras pequeñas son 0.2-0.5.
- BrainState::with_params(1024, ente_brain::CrystallizationParams {
+ BrainState::with_params(1024, arje_brain::CrystallizationParams {
min_support: 2,
min_conditional_prob: 0.3,
min_pmi: 1.0,
@@ -300,13 +300,13 @@ async fn primordial_loop(
let mut obs = brain.observer.write().await;
// Reemplazar con un observer nuevo que tenga half-life. Estado
// anterior (vacío en este punto) descartado.
- *obs = ente_brain::Observer::new(1024).with_half_life(hl);
+ *obs = arje_brain::Observer::new(1024).with_half_life(hl);
info!(hl_secs = hl, "observer con time-decay activo");
}
if let Some(secs) = autopromote_secs {
- ente_brain::spawn_autopromote_loop(
+ arje_brain::spawn_autopromote_loop(
brain.clone(),
- ente_brain::AutopromoteParams {
+ arje_brain::AutopromoteParams {
interval_secs: secs,
threshold: brain.params, // mismo threshold que crystals manuales
},
@@ -322,7 +322,7 @@ async fn primordial_loop(
Ok(snap) => {
let total = snap.total;
let kinds = snap.marginal.len();
- let restored = ente_brain::Observer::from_snapshot(snap);
+ let restored = arje_brain::Observer::from_snapshot(snap);
*brain.observer.write().await = restored;
info!(
path = %brain_path.display(),
@@ -337,7 +337,7 @@ async fn primordial_loop(
// Si --audit-head, configuramos el head pointer y arrancamos auto-flush.
if let Some(head_path) = audit_head {
// Re-creamos el AuditLog con head pointer.
- let new_audit = ente_brain::audit::AuditLog::new()
+ let new_audit = arje_brain::audit::AuditLog::new()
.with_head_pointer(head_path);
*brain.audit.write().await = new_audit;
spawn_audit_auto_flush(brain.clone());
@@ -345,7 +345,7 @@ async fn primordial_loop(
// Carga inicial de reglas desde JSON/JSONL si --rules path proporcionado.
if let Some(path) = &rules_path {
- match ente_brain::load_rules_file(path) {
+ match arje_brain::load_rules_file(path) {
Ok(rules) => {
let mut engine = brain.engine.write().await;
for r in rules {
@@ -367,7 +367,7 @@ async fn primordial_loop(
Ok(addr) => {
let s = brain.clone();
tokio::spawn(async move {
- if let Err(e) = ente_brain::serve_metrics(s, addr).await {
+ if let Err(e) = arje_brain::serve_metrics(s, addr).await {
warn!(?e, "metrics server cayó");
}
});
@@ -536,14 +536,14 @@ async fn emit_death(
fn spawn_echo_smoke_test(bus_path: PathBuf) {
tokio::spawn(async move {
tokio::time::sleep(Duration::from_millis(300)).await;
- match ente_bus::BusClient::connect(&bus_path).await {
+ match arje_bus::BusClient::connect(&bus_path).await {
Ok(mut client) => {
- let req = ente_bus::BusRequest::Invoke {
- cap: ente_echo::echo_capability(),
+ let req = arje_bus::BusRequest::Invoke {
+ cap: arje_echo::echo_capability(),
blob: b"hola fractal forwardeado".to_vec(),
};
match client.call(req).await {
- Ok(ente_bus::BusResponse::Invoked { result }) => {
+ Ok(arje_bus::BusResponse::Invoked { result }) => {
info!(echo = %String::from_utf8_lossy(&result), "Invoke ECHO round-trip OK");
}
Ok(other) => warn!(?other, "Invoke ECHO respuesta inesperada"),
@@ -555,7 +555,7 @@ fn spawn_echo_smoke_test(bus_path: PathBuf) {
});
}
-fn write_brain_snapshot(path: &std::path::Path, snap: &ente_brain::observer::ObserverSnapshot) -> anyhow::Result<()> {
+fn write_brain_snapshot(path: &std::path::Path, snap: &arje_brain::observer::ObserverSnapshot) -> anyhow::Result<()> {
let bytes = serde_json::to_vec_pretty(snap)?;
if let Some(parent) = path.parent() { let _ = std::fs::create_dir_all(parent); }
let tmp = path.with_extension("tmp");
@@ -564,16 +564,16 @@ fn write_brain_snapshot(path: &std::path::Path, snap: &ente_brain::observer::Obs
Ok(())
}
-fn read_brain_snapshot(path: &std::path::Path) -> anyhow::Result<ente_brain::observer::ObserverSnapshot> {
+fn read_brain_snapshot(path: &std::path::Path) -> anyhow::Result<arje_brain::observer::ObserverSnapshot> {
let bytes = std::fs::read(path)?;
- let snap: ente_brain::observer::ObserverSnapshot = serde_json::from_slice(&bytes)?;
+ let snap: arje_brain::observer::ObserverSnapshot = serde_json::from_slice(&bytes)?;
Ok(snap)
}
fn init_tracing() {
use tracing_subscriber::{fmt, EnvFilter};
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_zero=debug,info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_zero=debug,info"));
fmt().with_env_filter(filter).with_target(true).init();
}
@@ -625,7 +625,7 @@ async fn feed_brain(
evt: &GraphEvent,
) {
let Some((kind, subj)) = brain_glue::graph_event_to_brain(evt, graph) else { return };
- let history: Vec<ente_brain::TimedEvent> = {
+ let history: Vec<arje_brain::TimedEvent> = {
let mut obs = brain.observer.write().await;
obs.record(kind.clone());
// Snapshot de los últimos 16 eventos — suficiente para cualquier
@@ -637,7 +637,7 @@ async fn feed_brain(
engine.dispatch(&kind, &subj, &history)
};
if !rules.is_empty() {
- ente_brain::dispatch_actions(&rules, sink).await;
+ arje_brain::dispatch_actions(&rules, sink).await;
}
}
diff --git a/crates/init/ente-zero/src/seed.rs b/crates/init/arje-zero/src/seed.rs
similarity index 95%
rename from crates/init/ente-zero/src/seed.rs
rename to crates/init/arje-zero/src/seed.rs
index fe01689..6d404f5 100644
--- a/crates/init/ente-zero/src/seed.rs
+++ b/crates/init/arje-zero/src/seed.rs
@@ -8,7 +8,7 @@
//! todas las capacidades del fractal.
use anyhow::Context;
-use ente_card::{
+use arje_card::{
Capability, CardError, CgroupSpec, EntityCard, NamespaceSet, Payload,
ResourceLimits, SomaSpec, Supervision, CARD_SCHEMA_VERSION,
};
@@ -33,7 +33,7 @@ pub fn load(dev_mode: bool, restore: Option<&Path>) -> anyhow::Result<EntityCard
}
fn load_from_snapshot(path: &Path) -> anyhow::Result<EntityCard> {
- let snap = ente_snapshot::FractalSnapshot::read(path)
+ let snap = arje_snapshot::FractalSnapshot::read(path)
.with_context(|| format!("read snapshot {}", path.display()))?;
info!(
path = %path.display(),
@@ -66,7 +66,7 @@ fn load_from_snapshot(path: &Path) -> anyhow::Result<EntityCard> {
fn load_or_synthesize(dev_mode: bool) -> anyhow::Result<EntityCard> {
// Buscamos primero `.json` (canónico), luego sin extensión por
// compatibilidad con instalaciones que dejan el archivo crudo. La puerta
- // genética se cruza vía `ente_brain::load_card_file` que pasa por
+ // genética se cruza vía `arje_brain::load_card_file` que pasa por
// `validate()` extendido.
let candidates: &[&str] = if dev_mode {
&["seed.card.json", SEED_PATH_DEV]
@@ -76,7 +76,7 @@ fn load_or_synthesize(dev_mode: bool) -> anyhow::Result<EntityCard> {
for cand in candidates {
let path = PathBuf::from(cand);
if !path.exists() { continue; }
- let card = ente_brain::load_card_file(&path)
+ let card = arje_brain::load_card_file(&path)
.with_context(|| format!("load {}", path.display()))?;
info!(path = %path.display(), "Tarjeta Semilla cargada y validada");
return Ok(card);
@@ -96,8 +96,8 @@ fn synthesize_dev_seed() -> EntityCard {
// Pre-registramos el módulo Wasm demo en el CAS y obtenemos su SHA real.
// Si el CAS no es escribible (raro en dev) caemos a un SHA cero — la
// resolución fallará y el Wasm no encarnará, pero el resto queda intacto.
- let demo_wasm_sha = match ente_wasm::demo_module_bytes()
- .and_then(|b| ente_cas::store(&b))
+ let demo_wasm_sha = match arje_wasm::demo_module_bytes()
+ .and_then(|b| arje_cas::store(&b))
{
Ok(sha) => sha,
Err(e) => {
@@ -134,7 +134,7 @@ fn synthesize_dev_seed() -> EntityCard {
if let Some(card) = optional_native_card(
"demo-echo", "target/debug/ente-echo",
- [ente_echo::echo_capability()].into_iter().collect(),
+ [arje_echo::echo_capability()].into_iter().collect(),
restart_supervision(),
) {
genesis.push(card);
diff --git a/crates/init/ente-soma/Cargo.toml b/crates/init/ente-soma/Cargo.toml
deleted file mode 100644
index dba4f57..0000000
--- a/crates/init/ente-soma/Cargo.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[package]
-name = "ente-soma"
-version = "0.0.1"
-edition.workspace = true
-license.workspace = true
-publish.workspace = true
-description = "Wrapper histórico sobre ente-incarnate para mantener la API set_bus_sock+incarnate que usa ente-zero. Toda la lógica vive en ente-incarnate."
-
-[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../../runtime/ente-bus" }
-ente-incarnate = { path = "../ente-incarnate" }
-nix = { workspace = true }
-anyhow = { workspace = true }
-tracing = { workspace = true }
diff --git a/crates/modules/akasha/SDD.md b/crates/modules/chasqui/SDD.md
similarity index 100%
rename from crates/modules/akasha/SDD.md
rename to crates/modules/chasqui/SDD.md
diff --git a/crates/modules/akasha/card/Cargo.toml b/crates/modules/chasqui/card/Cargo.toml
similarity index 95%
rename from crates/modules/akasha/card/Cargo.toml
rename to crates/modules/chasqui/card/Cargo.toml
index 2af214c..8d966c6 100644
--- a/crates/modules/akasha/card/Cargo.toml
+++ b/crates/modules/chasqui/card/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "akasha-card"
+name = "chasqui-card"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
diff --git a/crates/modules/akasha/card/src/lib.rs b/crates/modules/chasqui/card/src/lib.rs
similarity index 98%
rename from crates/modules/akasha/card/src/lib.rs
rename to crates/modules/chasqui/card/src/lib.rs
index c1c435d..c46181f 100644
--- a/crates/modules/akasha/card/src/lib.rs
+++ b/crates/modules/chasqui/card/src/lib.rs
@@ -1,4 +1,4 @@
-//! `akasha-card` — manifiesto de Mónada.
+//! `chasqui-card` — manifiesto de Mónada.
//!
//! Una **Mónada** es una agrupación semántica de archivos: el archivo
//! físico no se mueve, pero su pertenencia se modela por un objeto
@@ -10,7 +10,7 @@
//!
//! Diferencia con `brahman-card::Card`:
//!
-//! | brahman::Card | akasha::MonadManifest |
+//! | brahman::Card | chasqui::MonadManifest |
//! |-------------------------------------|-------------------------------|
//! | Describe una **entidad runtime** | Describe una **agrupación** |
//! | Tiene `payload`/`soma`/`supervision`| No tiene proceso detrás |
@@ -18,7 +18,7 @@
//! | Fluye por handshake/postcard | Fluye por queries del backend |
//!
//! Este crate sólo define los tipos. La lógica de scan, cluster,
-//! attraction vive en `akasha-core`.
+//! attraction vive en `chasqui-core`.
#![forbid(unsafe_code)]
#![warn(rust_2018_idioms)]
diff --git a/crates/modules/akasha/card/src/query.rs b/crates/modules/chasqui/card/src/query.rs
similarity index 96%
rename from crates/modules/akasha/card/src/query.rs
rename to crates/modules/chasqui/card/src/query.rs
index 125ba27..c4debb9 100644
--- a/crates/modules/akasha/card/src/query.rs
+++ b/crates/modules/chasqui/card/src/query.rs
@@ -1,12 +1,12 @@
-//! Wire types para consultar al daemon `akasha` por sus Mónadas.
+//! Wire types para consultar al daemon `chasqui` por sus Mónadas.
//!
//! El daemon expone un Unix socket (cuyo path se publica en
//! `Card.service_socket` y se descubre vía broker MatchEvent). Cada
//! conexión es single-shot: una request JSON terminada en `\n`,
//! una response JSON terminada en `\n`, cierre.
//!
-//! Mismo patrón que `akasha-nous` (mock/real ↔ akasha-core), reusado
-//! ahora para que la UI (`akasha-explorer`) descubra y consulte al
+//! Mismo patrón que `chasqui-nous` (mock/real ↔ chasqui-core), reusado
+//! ahora para que la UI (`chasqui-explorer`) descubra y consulte al
//! daemon sin hardcodear sockets ni pasar por brahman-admin.
//!
//! ## Contrato
@@ -118,7 +118,7 @@ impl MonadView {
/// Error de protocolo retornado en lugar de la response normal.
#[derive(Debug, Clone, Serialize, Deserialize, Error)]
-#[error("akasha-engine: {error}")]
+#[error("chasqui-engine: {error}")]
pub struct ErrorResponse {
pub error: String,
}
@@ -135,7 +135,7 @@ pub mod transport {
pub const SOCKET_ENV: &str = "NOUSER_ENGINE_SOCKET";
/// Nombre por defecto del socket.
- pub const SOCKET_NAME: &str = "akasha-engine.sock";
+ pub const SOCKET_NAME: &str = "chasqui-engine.sock";
/// Ruta canónica al socket del daemon. Honra `NOUSER_ENGINE_SOCKET`
/// si está set, sino arma sobre `$XDG_RUNTIME_DIR` (con fallback
@@ -154,7 +154,7 @@ pub mod transport {
// =====================================================================
// Cliente blocking — vive con los wire types para que un consumer
// (UI, CLI, otro módulo) pueda hablar con el daemon importando sólo
-// `akasha-card`, sin arrastrar `akasha-core` (notify/walkdir/sled/blake3).
+// `chasqui-card`, sin arrastrar `chasqui-core` (notify/walkdir/sled/blake3).
// =====================================================================
/// Cliente síncrono para el query socket del daemon. Sólo Unix (el
diff --git a/crates/modules/akasha/core/Cargo.toml b/crates/modules/chasqui/core/Cargo.toml
similarity index 88%
rename from crates/modules/akasha/core/Cargo.toml
rename to crates/modules/chasqui/core/Cargo.toml
index 4b7f88f..7b9e084 100644
--- a/crates/modules/akasha/core/Cargo.toml
+++ b/crates/modules/chasqui/core/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "akasha-core"
+name = "chasqui-core"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -9,8 +9,8 @@ publish.workspace = true
description = "Nouser — explorador de Mónadas: scanner, clustering determinista, DB en memoria."
[dependencies]
-akasha-card = { path = "../card" }
-akasha-nous = { path = "../nous" }
+chasqui-card = { path = "../card" }
+chasqui-nous = { path = "../nous" }
shuma-discern = { path = "../../shuma/shuma-discern" }
brahman-card = { path = "../../../protocol/brahman-card" }
brahman-handshake = { path = "../../../protocol/brahman-handshake" }
@@ -29,5 +29,5 @@ notify = { workspace = true }
tempfile = { workspace = true }
[[bin]]
-name = "akasha"
+name = "chasqui"
path = "src/bin/nouser.rs"
diff --git a/crates/modules/akasha/core/src/bin/nouser.rs b/crates/modules/chasqui/core/src/bin/nouser.rs
similarity index 91%
rename from crates/modules/akasha/core/src/bin/nouser.rs
rename to crates/modules/chasqui/core/src/bin/nouser.rs
index 1209993..d652059 100644
--- a/crates/modules/akasha/core/src/bin/nouser.rs
+++ b/crates/modules/chasqui/core/src/bin/nouser.rs
@@ -1,4 +1,4 @@
-//! `akasha` CLI — explorador de Mónadas.
+//! `chasqui` CLI — explorador de Mónadas.
//!
//! Subcomandos:
//!
@@ -13,14 +13,14 @@
use std::path::PathBuf;
use std::process::ExitCode;
-use akasha_core::{
+use chasqui_core::{
cluster, db, embed,
scanner::{self, ScanConfig},
};
fn main() -> ExitCode {
let args: Vec<String> = std::env::args().collect();
- let prog = args.first().cloned().unwrap_or_else(|| "akasha".into());
+ let prog = args.first().cloned().unwrap_or_else(|| "chasqui".into());
let sub = match args.get(1).map(String::as_str) {
Some(s) => s,
None => {
@@ -41,7 +41,7 @@ fn main() -> ExitCode {
return ExitCode::SUCCESS;
}
other => {
- eprintln!("akasha: comando desconocido '{other}'");
+ eprintln!("chasqui: comando desconocido '{other}'");
print_usage(&prog);
return ExitCode::from(2);
}
@@ -50,7 +50,7 @@ fn main() -> ExitCode {
match result {
Ok(()) => ExitCode::SUCCESS,
Err(e) => {
- eprintln!("akasha: {e}");
+ eprintln!("chasqui: {e}");
ExitCode::from(1)
}
}
@@ -181,7 +181,7 @@ fn cmd_daemon(args: &[String]) -> Cmd {
// 1. Decidir el path del query socket ANTES de armar el engine
// Card (porque viaja como service_socket en la Card).
- let query_socket = akasha_card::query::transport::default_socket_path();
+ let query_socket = chasqui_card::query::transport::default_socket_path();
// 2. Engine como Ente. Declara service_socket + flow.output para
// que el broker pueda emitir MatchEvent::Available a consumers
@@ -190,7 +190,7 @@ fn cmd_daemon(args: &[String]) -> Cmd {
let engine_id = engine_card.id;
let engine_label = engine_card.label.clone();
eprintln!(
- "akasha daemon: publicando engine '{}' (kind=Ente, id={}, socket={})",
+ "chasqui daemon: publicando engine '{}' (kind=Ente, id={}, socket={})",
engine_label,
engine_id,
query_socket.display()
@@ -227,7 +227,7 @@ fn cmd_daemon(args: &[String]) -> Cmd {
hydrated += 1;
}
eprintln!(
- "akasha daemon: hidratadas {} mónadas previas{} en O(1)",
+ "chasqui daemon: hidratadas {} mónadas previas{} en O(1)",
hydrated,
if skipped_model > 0 {
format!(" ({} dropeadas por centroid_model distinto)", skipped_model)
@@ -245,7 +245,7 @@ fn cmd_daemon(args: &[String]) -> Cmd {
let monads = cluster::by_directory_hydrated(&files, min_files(), Some(&db));
let scanned_count = monads.len();
eprintln!(
- "akasha daemon: re-scan {} archivos en {} → {} mónadas",
+ "chasqui daemon: re-scan {} archivos en {} → {} mónadas",
n_files,
dir.display(),
scanned_count
@@ -276,7 +276,7 @@ fn cmd_daemon(args: &[String]) -> Cmd {
db.replace_monads(monads);
eprintln!(
- "akasha daemon: 1 ente + {} mónadas vivas ({} nuevas vs hidratación)",
+ "chasqui daemon: 1 ente + {} mónadas vivas ({} nuevas vs hidratación)",
scanned_count, newly_spawned
);
@@ -285,8 +285,8 @@ fn cmd_daemon(args: &[String]) -> Cmd {
// Si el bind falla, seguimos sin él — la UI degrada a "no
// alcanzable" pero el daemon sigue procesando cambios.
let db_shared = std::sync::Arc::new(std::sync::Mutex::new(db));
- let _query_listener = match akasha_core::engine_socket::spawn_listener(
- akasha_core::engine_socket::ListenerConfig {
+ let _query_listener = match chasqui_core::engine_socket::spawn_listener(
+ chasqui_core::engine_socket::ListenerConfig {
socket_path: query_socket.clone(),
engine_id,
engine_label: engine_label.clone(),
@@ -296,14 +296,14 @@ fn cmd_daemon(args: &[String]) -> Cmd {
) {
Ok(h) => {
eprintln!(
- "akasha daemon: query socket activo en {} (proto: akasha_card::query)",
+ "chasqui daemon: query socket activo en {} (proto: chasqui_card::query)",
query_socket.display()
);
Some(h)
}
Err(e) => {
eprintln!(
- "akasha daemon: query socket NO disponible ({e}) — explorer no podrá consultar"
+ "chasqui daemon: query socket NO disponible ({e}) — explorer no podrá consultar"
);
None
}
@@ -322,14 +322,14 @@ fn cmd_daemon(args: &[String]) -> Cmd {
) {
Ok(w) => {
eprintln!(
- "akasha daemon: watcher activo en {} (debounce 150ms, re-publish on) — Ctrl-C para terminar.",
+ "chasqui daemon: watcher activo en {} (debounce 150ms, re-publish on) — Ctrl-C para terminar.",
dir.display()
);
Some(w)
}
Err(e) => {
eprintln!(
- "akasha daemon: watcher deshabilitado ({e}) — Ctrl-C para terminar."
+ "chasqui daemon: watcher deshabilitado ({e}) — Ctrl-C para terminar."
);
None
}
@@ -385,7 +385,7 @@ fn spawn_fs_watcher(
// Dispatcher: notify → filtro → canal de paths.
let dispatch_dir = dir.clone();
std::thread::Builder::new()
- .name("akasha-watcher-dispatch".into())
+ .name("chasqui-watcher-dispatch".into())
.spawn(move || {
for res in notify_rx {
let event = match res {
@@ -416,7 +416,7 @@ fn spawn_fs_watcher(
// Coordinator: debounce + batch dispatch.
let coord_dir = dir;
std::thread::Builder::new()
- .name("akasha-watcher-coord".into())
+ .name("chasqui-watcher-coord".into())
.spawn(move || {
let debounce = std::time::Duration::from_millis(WATCHER_DEBOUNCE_MS);
let mut pending: std::collections::HashMap<
@@ -494,7 +494,7 @@ fn process_change_batch(
}
};
- let prior_monads: Vec<akasha_card::MonadManifest> = db_lock.monads().cloned().collect();
+ let prior_monads: Vec<chasqui_card::MonadManifest> = db_lock.monads().cloned().collect();
let prior_ref: &db::MonadDb = &db_lock;
let monads = cluster::by_directory_hydrated(&files, min_files(), Some(prior_ref));
@@ -601,8 +601,8 @@ fn cmd_attract(args: &[String]) -> Cmd {
.and_then(|t| t.duration_since(std::time::UNIX_EPOCH).ok())
.map(|d| d.as_millis() as u64)
.unwrap_or(0);
- let target = akasha_card::FileEntry {
- id: akasha_card::FileId::from(akasha_card::ulid::Ulid::new()),
+ let target = chasqui_card::FileEntry {
+ id: chasqui_card::FileId::from(chasqui_card::ulid::Ulid::new()),
path: file_path.clone(),
content_hash: None,
size: metadata.len(),
@@ -630,7 +630,7 @@ fn cmd_attract(args: &[String]) -> Cmd {
// Filtramos Mónadas cuyo centroid_model NO matchee. Mezclar
// 32-d con 384-d daría scores sin sentido (diferente semántica
// y cosine no compara cross-modelo).
- let mut ranked: Vec<(&akasha_card::MonadManifest, f32)> = db
+ let mut ranked: Vec<(&chasqui_card::MonadManifest, f32)> = db
.monads()
.filter(|m| !m.centroid.is_empty())
.filter(|m| match &m.centroid_model {
@@ -700,7 +700,7 @@ fn cmd_attract(args: &[String]) -> Cmd {
/// Devuelve `(embedding, model_id)` — el caller necesita ambos para
/// comparar contra centroides taggeados con su mismo `centroid_model`.
fn remote_embed(
- file: &akasha_card::FileEntry,
+ file: &chasqui_card::FileEntry,
) -> Result<(Vec<f32>, String), Box<dyn std::error::Error>> {
if let Ok(explicit) = std::env::var("NOUSER_NOUS_SOCKET") {
let sock = std::path::PathBuf::from(explicit);
@@ -708,9 +708,9 @@ fn remote_embed(
}
let consumer = brahman_sidecar::build_consumer_card(
- "akasha.attract-cli",
- akasha_nous::FLOW_EMBED_RESULT,
- akasha_nous::FLOW_TYPE_NAME,
+ "chasqui.attract-cli",
+ chasqui_nous::FLOW_EMBED_RESULT,
+ chasqui_nous::FLOW_TYPE_NAME,
);
let producer_sock = brahman_sidecar::await_provider_blocking(
consumer,
@@ -719,12 +719,12 @@ fn remote_embed(
embed_via(&producer_sock, file)
}
-/// RPC blocking contra un socket akasha-nous concreto. Devuelve
+/// RPC blocking contra un socket chasqui-nous concreto. Devuelve
/// `(embedding, model_id)` — el `model_id` viaja en la response y
/// permite al caller saber qué centroides son comparables.
fn embed_via(
sock_path: &std::path::Path,
- file: &akasha_card::FileEntry,
+ file: &chasqui_card::FileEntry,
) -> Result<(Vec<f32>, String), Box<dyn std::error::Error>> {
use std::io::{BufRead, BufReader, Write};
use std::os::unix::net::UnixStream;
@@ -734,9 +734,9 @@ fn embed_via(
}
let mut stream = UnixStream::connect(sock_path)?;
- let req = akasha_nous::EmbedRequest {
- kind: akasha_nous::RequestKind::EmbedFile,
- payload: serde_json::to_value(akasha_nous::EmbedFilePayload {
+ let req = chasqui_nous::EmbedRequest {
+ kind: chasqui_nous::RequestKind::EmbedFile,
+ payload: serde_json::to_value(chasqui_nous::EmbedFilePayload {
path: file.path.display().to_string(),
extension: file.extension.clone(),
size: file.size,
@@ -752,14 +752,14 @@ fn embed_via(
let mut response = String::new();
reader.read_line(&mut response)?;
if response.is_empty() {
- return Err("akasha-nous cerró sin respuesta".into());
+ return Err("chasqui-nous cerró sin respuesta".into());
}
- if let Ok(resp) = serde_json::from_str::<akasha_nous::EmbedResponse>(&response) {
+ if let Ok(resp) = serde_json::from_str::<chasqui_nous::EmbedResponse>(&response) {
return Ok((resp.embedding, resp.model));
}
- let err: akasha_nous::ErrorResponse = serde_json::from_str(&response)?;
- Err(format!("akasha-nous: {}", err.error).into())
+ let err: chasqui_nous::ErrorResponse = serde_json::from_str(&response)?;
+ Err(format!("chasqui-nous: {}", err.error).into())
}
/// Card del propio engine (kind=Ente). Es el "ser" que produce y
@@ -771,7 +771,7 @@ fn embed_via(
/// brahman-admin.
fn build_engine_card(service_socket: std::path::PathBuf) -> brahman_card::Card {
use brahman_card::{Card, CardKind, Flow, Flows, Lifecycle, Payload, Priority, Supervision, TypeRef};
- use akasha_card::query::{FLOW_MONAD_LIST, FLOW_TYPE_NAME};
+ use chasqui_card::query::{FLOW_MONAD_LIST, FLOW_TYPE_NAME};
Card {
payload: Payload::Virtual,
diff --git a/crates/modules/akasha/core/src/cluster.rs b/crates/modules/chasqui/core/src/cluster.rs
similarity index 99%
rename from crates/modules/akasha/core/src/cluster.rs
rename to crates/modules/chasqui/core/src/cluster.rs
index 2aad513..85af5b5 100644
--- a/crates/modules/akasha/core/src/cluster.rs
+++ b/crates/modules/chasqui/core/src/cluster.rs
@@ -15,7 +15,7 @@
use std::collections::BTreeMap;
use std::path::PathBuf;
-use akasha_card::{FileEntry, Lens, MonadManifest};
+use chasqui_card::{FileEntry, Lens, MonadManifest};
use crate::embed;
@@ -236,7 +236,7 @@ fn shannon_entropy_normalized(files: &[&FileEntry]) -> f32 {
#[cfg(test)]
mod tests {
use super::*;
- use akasha_card::FileId;
+ use chasqui_card::FileId;
use std::path::PathBuf;
use ulid::Ulid;
diff --git a/crates/modules/akasha/core/src/db.rs b/crates/modules/chasqui/core/src/db.rs
similarity index 99%
rename from crates/modules/akasha/core/src/db.rs
rename to crates/modules/chasqui/core/src/db.rs
index 0045a86..6674015 100644
--- a/crates/modules/akasha/core/src/db.rs
+++ b/crates/modules/chasqui/core/src/db.rs
@@ -12,7 +12,7 @@
use std::collections::BTreeMap;
use std::path::Path;
-use akasha_card::{FileEntry, FileId, MonadId, MonadManifest};
+use chasqui_card::{FileEntry, FileId, MonadId, MonadManifest};
use thiserror::Error;
#[derive(Debug, Error)]
@@ -188,7 +188,7 @@ fn decode_key(k: &[u8]) -> Result<ulid::Ulid, MonadDbError> {
#[cfg(test)]
mod tests {
use super::*;
- use akasha_card::Lens;
+ use chasqui_card::Lens;
use ulid::Ulid;
fn mk_file(path: &str) -> FileEntry {
diff --git a/crates/modules/akasha/core/src/embed.rs b/crates/modules/chasqui/core/src/embed.rs
similarity index 98%
rename from crates/modules/akasha/core/src/embed.rs
rename to crates/modules/chasqui/core/src/embed.rs
index 245ebbf..4113d5e 100644
--- a/crates/modules/akasha/core/src/embed.rs
+++ b/crates/modules/chasqui/core/src/embed.rs
@@ -27,7 +27,7 @@
//! - Dirs distintos + misma ext → similitud ~ 0.5.
//! - Sin parecido → similitud < 0.3.
-use akasha_card::{FileEntry, MonadId, MonadManifest};
+use chasqui_card::{FileEntry, MonadId, MonadManifest};
/// Dimensión del vector embedding.
pub const EMBED_DIM: usize = 32;
@@ -37,7 +37,7 @@ pub const EMBED_DIM: usize = 32;
/// este string contra el suyo antes de hacer cosine similarity.
/// Mezclar centroides de distinto MODEL_ID corrompe scores
/// silenciosamente (dimensiones distintas, semántica distinta).
-pub const MODEL_ID: &str = "akasha-pseudo-32d";
+pub const MODEL_ID: &str = "chasqui-pseudo-32d";
/// Computa el embedding de un archivo. Determinístico: misma input
/// → mismo vector. El vector queda L2-normalizado.
@@ -185,7 +185,7 @@ pub const DEFAULT_ATTRACTION_THRESHOLD: f32 = 0.7;
#[cfg(test)]
mod tests {
use super::*;
- use akasha_card::FileId;
+ use chasqui_card::FileId;
use std::path::PathBuf;
use ulid::Ulid;
diff --git a/crates/modules/akasha/core/src/engine_socket.rs b/crates/modules/chasqui/core/src/engine_socket.rs
similarity index 90%
rename from crates/modules/akasha/core/src/engine_socket.rs
rename to crates/modules/chasqui/core/src/engine_socket.rs
index 2b81de1..988aeaa 100644
--- a/crates/modules/akasha/core/src/engine_socket.rs
+++ b/crates/modules/chasqui/core/src/engine_socket.rs
@@ -1,13 +1,13 @@
-//! Listener Unix-socket que sirve [`akasha_card::query::QueryRequest`].
+//! Listener Unix-socket que sirve [`chasqui_card::query::QueryRequest`].
//!
-//! El daemon `akasha` lo monta para que cualquier consumer (UI, CLI,
+//! El daemon `chasqui` lo monta para que cualquier consumer (UI, CLI,
//! otro módulo) pueda preguntarle por sus Mónadas sin pasar por
//! brahman-admin. El path del socket viaja en el `Card.service_socket`
//! del engine; el broker brahman lo enseña vía MatchEvent::Available
//! cuando un consumer declara `flow.input = monad-list:json`.
//!
//! Wire: line-delimited JSON, single-shot por conexión. Mismo patrón
-//! que `akasha-nous` (mock/real ↔ akasha-core), reutilizado.
+//! que `chasqui-nous` (mock/real ↔ chasqui-core), reutilizado.
//!
//! Threading: un thread dedicado, blocking I/O. No vale la pena traer
//! tokio acá — la frecuencia esperada es muy baja (UI poll cada 2s)
@@ -18,10 +18,10 @@ use std::os::unix::net::{UnixListener, UnixStream};
use std::path::PathBuf;
use std::sync::{Arc, Mutex};
-use akasha_card::query::{
+use chasqui_card::query::{
EngineInfo, ErrorResponse, ListMonadsResponse, MonadView, QueryRequest,
};
-use akasha_card::ulid::Ulid;
+use chasqui_card::ulid::Ulid;
use crate::db::MonadDb;
@@ -54,7 +54,7 @@ pub fn spawn_listener(
let listener = UnixListener::bind(&config.socket_path)?;
let handle = std::thread::Builder::new()
- .name("akasha-engine-listener".into())
+ .name("chasqui-engine-listener".into())
.spawn(move || {
for conn in listener.incoming() {
match conn {
@@ -126,17 +126,17 @@ fn encode_error(msg: String) -> String {
serde_json::to_string(&err).unwrap_or_else(|_| "{\"error\":\"encode\"}".into())
}
-// El cliente blocking vive en `akasha_card::query::client` — junto a
+// El cliente blocking vive en `chasqui_card::query::client` — junto a
// los wire types — para que un consumer pueda hablar con el daemon
-// importando sólo `akasha-card`, sin arrastrar el peso de
-// `akasha-core` (scanner / db / sled / notify / walkdir / blake3).
+// importando sólo `chasqui-card`, sin arrastrar el peso de
+// `chasqui-core` (scanner / db / sled / notify / walkdir / blake3).
#[cfg(test)]
mod tests {
use super::*;
use crate::db::MonadDb;
- use akasha_card::query::client as query_client;
- use akasha_card::MonadManifest;
+ use chasqui_card::query::client as query_client;
+ use chasqui_card::MonadManifest;
use std::time::Duration;
fn fresh_socket_path(name: &str) -> PathBuf {
@@ -147,7 +147,7 @@ mod tests {
#[test]
fn list_monads_roundtrip_empty() {
- let socket = fresh_socket_path("akasha-engine-test");
+ let socket = fresh_socket_path("chasqui-engine-test");
let db = Arc::new(Mutex::new(MonadDb::new()));
let engine_id = Ulid::new();
let _h = spawn_listener(
@@ -178,7 +178,7 @@ mod tests {
#[test]
fn list_monads_returns_views() {
- let socket = fresh_socket_path("akasha-engine-test-views");
+ let socket = fresh_socket_path("chasqui-engine-test-views");
let db = Arc::new(Mutex::new(MonadDb::new()));
let m1 = MonadManifest::new("alpha");
let m2 = MonadManifest::new("beta");
@@ -209,7 +209,7 @@ mod tests {
#[test]
fn invalid_request_returns_error_response() {
- let socket = fresh_socket_path("akasha-engine-test-bad");
+ let socket = fresh_socket_path("chasqui-engine-test-bad");
let db = Arc::new(Mutex::new(MonadDb::new()));
let _h = spawn_listener(
ListenerConfig {
diff --git a/crates/modules/akasha/core/src/lib.rs b/crates/modules/chasqui/core/src/lib.rs
similarity index 93%
rename from crates/modules/akasha/core/src/lib.rs
rename to crates/modules/chasqui/core/src/lib.rs
index 8572c84..e0ce4f1 100644
--- a/crates/modules/akasha/core/src/lib.rs
+++ b/crates/modules/chasqui/core/src/lib.rs
@@ -1,4 +1,4 @@
-//! `akasha-core` — el explorador de Mónadas.
+//! `chasqui-core` — el explorador de Mónadas.
//!
//! Implementa la pipeline determinista descrita en el diseño de Kairos:
//!
@@ -31,4 +31,4 @@ pub mod embed;
pub mod engine_socket;
pub mod scanner;
-pub use akasha_card::*;
+pub use chasqui_card::*;
diff --git a/crates/modules/akasha/core/src/scanner.rs b/crates/modules/chasqui/core/src/scanner.rs
similarity index 99%
rename from crates/modules/akasha/core/src/scanner.rs
rename to crates/modules/chasqui/core/src/scanner.rs
index 3c12cf5..520263c 100644
--- a/crates/modules/akasha/core/src/scanner.rs
+++ b/crates/modules/chasqui/core/src/scanner.rs
@@ -6,7 +6,7 @@
use std::path::{Path, PathBuf};
use std::time::UNIX_EPOCH;
-use akasha_card::{FileEntry, FileId};
+use chasqui_card::{FileEntry, FileId};
use thiserror::Error;
use ulid::Ulid;
use walkdir::WalkDir;
diff --git a/crates/modules/akasha/nous-mock/Cargo.toml b/crates/modules/chasqui/nous-mock/Cargo.toml
similarity index 80%
rename from crates/modules/akasha/nous-mock/Cargo.toml
rename to crates/modules/chasqui/nous-mock/Cargo.toml
index ed40eb8..f05d903 100644
--- a/crates/modules/akasha/nous-mock/Cargo.toml
+++ b/crates/modules/chasqui/nous-mock/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "akasha-nous-mock"
+name = "chasqui-nous-mock"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -11,9 +11,9 @@ description = "Nouser — Nous mock determinístico: implementa el contrato nous
[dependencies]
brahman-card = { path = "../../../protocol/brahman-card" }
brahman-sidecar = { path = "../../../protocol/brahman-sidecar" }
-akasha-card = { path = "../card" }
-akasha-core = { path = "../core" }
-akasha-nous = { path = "../nous" }
+chasqui-card = { path = "../card" }
+chasqui-core = { path = "../core" }
+chasqui-nous = { path = "../nous" }
serde_json = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
@@ -21,5 +21,5 @@ tracing-subscriber = { workspace = true }
ulid = { workspace = true }
[[bin]]
-name = "akasha-nous-mock"
+name = "chasqui-nous-mock"
path = "src/main.rs"
diff --git a/crates/modules/akasha/nous-mock/src/main.rs b/crates/modules/chasqui/nous-mock/src/main.rs
similarity index 92%
rename from crates/modules/akasha/nous-mock/src/main.rs
rename to crates/modules/chasqui/nous-mock/src/main.rs
index 6d2d2ed..8793857 100644
--- a/crates/modules/akasha/nous-mock/src/main.rs
+++ b/crates/modules/chasqui/nous-mock/src/main.rs
@@ -1,7 +1,7 @@
-//! `akasha-nous-mock` — proveedor de embeddings determinista (sin LLM).
+//! `chasqui-nous-mock` — proveedor de embeddings determinista (sin LLM).
//!
-//! Implementa el contrato `akasha-nous` usando los pseudo-embeddings
-//! de Phase C (`akasha_core::embed`). Sirve como:
+//! Implementa el contrato `chasqui-nous` usando los pseudo-embeddings
+//! de Phase C (`chasqui_core::embed`). Sirve como:
//!
//! - **Mock para tests**: en `BRAHMAN_BROKER_CONTEXT=test`, el
//! `priority_offset` per-contexto declarado en su Card lo prioriza
@@ -16,7 +16,7 @@
//! `priority_contexts.test = { priority_offset: +1 }` lo prioriza
//! cuando el broker corre bajo contexto test.
//! 2. Bind del Unix socket en `$NOUSER_NOUS_SOCKET` (default
-//! `$XDG_RUNTIME_DIR/akasha-nous.sock`).
+//! `$XDG_RUNTIME_DIR/chasqui-nous.sock`).
//! 3. Loop: accept → read line JSON → process → write line JSON → close.
//! 4. Cada request se loggea (info) — útil para verificar que el
//! consumidor está usando este proveedor.
@@ -29,9 +29,9 @@ use brahman_card::{
ulid::Ulid, Card, CardKind, ContextBias, Flow, Flows, Lifecycle, Payload, Priority,
Supervision, TypeRef,
};
-use akasha_card::FileEntry;
-use akasha_core::embed;
-use akasha_nous::{
+use chasqui_card::FileEntry;
+use chasqui_core::embed;
+use chasqui_nous::{
transport, EmbedFilePayload, EmbedRequest, EmbedResponse, EmbedTextPayload, ErrorResponse,
PingResponse, RequestKind, FLOW_EMBED_REQUEST, FLOW_EMBED_RESULT, FLOW_TYPE_NAME,
};
@@ -39,11 +39,11 @@ use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader};
use tokio::net::{UnixListener, UnixStream};
use tracing::{info, warn};
-/// El mock implementa el MISMO algoritmo que `akasha_core::embed`,
+/// El mock implementa el MISMO algoritmo que `chasqui_core::embed`,
/// así que reportamos el mismo `MODEL_ID` que él. De otro modo el
/// consumer filtraría las Mónadas como "modelo distinto" y los
/// scores quedarían vacíos.
-const MODEL_ID: &str = akasha_core::embed::MODEL_ID;
+const MODEL_ID: &str = chasqui_core::embed::MODEL_ID;
#[tokio::main(flavor = "current_thread")]
async fn main() -> std::io::Result<()> {
@@ -60,7 +60,7 @@ async fn main() -> std::io::Result<()> {
std::fs::create_dir_all(parent)?;
}
let listener = UnixListener::bind(&sock_path)?;
- info!(socket = %sock_path.display(), "akasha-nous-mock escuchando");
+ info!(socket = %sock_path.display(), "chasqui-nous-mock escuchando");
// 2. Sidecar al brahman-init con la Card que declara el socket.
let card = build_card(sock_path.clone());
@@ -107,7 +107,7 @@ fn build_card(service_socket: std::path::PathBuf) -> Card {
Card {
schema_version: brahman_card::CARD_SCHEMA_VERSION,
id: Ulid::new(),
- label: "akasha.nous_mock".into(),
+ label: "chasqui.nous_mock".into(),
payload: Payload::Virtual,
supervision: Supervision::Delegate,
lifecycle: Lifecycle::Daemon,
@@ -178,7 +178,7 @@ fn handle_embed_file(payload: serde_json::Value, started: Instant) -> Result<Str
info!(path = %p.path, "embed_file");
let file = FileEntry {
- id: akasha_card::FileId::from(Ulid::new()),
+ id: chasqui_card::FileId::from(Ulid::new()),
path: PathBuf::from(p.path),
content_hash: None,
size: p.size,
@@ -204,7 +204,7 @@ fn handle_embed_text(payload: serde_json::Value, started: Instant) -> Result<Str
// resto del vector con ceros. No es semánticamente útil, pero respeta
// la forma para que el cliente no se rompa.
let synthetic = FileEntry {
- id: akasha_card::FileId::from(Ulid::new()),
+ id: chasqui_card::FileId::from(Ulid::new()),
path: PathBuf::from(format!("synthetic://{}", p.text)),
content_hash: None,
size: p.text.len() as u64,
diff --git a/crates/modules/akasha/nous-real/Cargo.toml b/crates/modules/chasqui/nous-real/Cargo.toml
similarity index 89%
rename from crates/modules/akasha/nous-real/Cargo.toml
rename to crates/modules/chasqui/nous-real/Cargo.toml
index 1606ff5..6a6a43d 100644
--- a/crates/modules/akasha/nous-real/Cargo.toml
+++ b/crates/modules/chasqui/nous-real/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "akasha-nous-real"
+name = "chasqui-nous-real"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -20,8 +20,8 @@ embeddings = ["dep:fastembed"]
[dependencies]
brahman-card = { path = "../../../protocol/brahman-card" }
brahman-sidecar = { path = "../../../protocol/brahman-sidecar" }
-ente-cas = { path = "../../../runtime/ente-cas" }
-akasha-nous = { path = "../nous" }
+arje-cas = { path = "../../../runtime/arje-cas" }
+chasqui-nous = { path = "../nous" }
serde_json = { workspace = true }
sled = { workspace = true }
tokio = { workspace = true }
@@ -36,5 +36,5 @@ fastembed = { version = "4", optional = true }
tempfile = { workspace = true }
[[bin]]
-name = "akasha-nous-real"
+name = "chasqui-nous-real"
path = "src/main.rs"
diff --git a/crates/modules/akasha/nous-real/src/cache.rs b/crates/modules/chasqui/nous-real/src/cache.rs
similarity index 96%
rename from crates/modules/akasha/nous-real/src/cache.rs
rename to crates/modules/chasqui/nous-real/src/cache.rs
index a5ab3cb..373d2ba 100644
--- a/crates/modules/akasha/nous-real/src/cache.rs
+++ b/crates/modules/chasqui/nous-real/src/cache.rs
@@ -2,7 +2,7 @@
//!
//! Razón de existir: el modelo real (`fastembed-allMiniLML6V2`) es
//! caro (1-50 ms por archivo según tamaño y CPU). Cada vez que el
-//! daemon de akasha re-publica una Mónada o el watcher dispara un
+//! daemon de chasqui re-publica una Mónada o el watcher dispara un
//! re-cluster por cambio de FS, todos los archivos pasan otra vez
//! por embed. Para árboles de 1000 archivos, eso son segundos
//! desperdiciados re-embedidando contenido que no cambió.
@@ -17,7 +17,7 @@
//! little-endian (4 bytes por f32). Compacto, sin overhead de
//! bincode/postcard para datos numéricos puros.
//! - **Backend**: sled, tree único `embed_cache_v1`. Path:
-//! `$XDG_CACHE_HOME/brahman/akasha-nous-real-embed-cache.sled`.
+//! `$XDG_CACHE_HOME/brahman/chasqui-nous-real-embed-cache.sled`.
//!
//! ## Versionado
//!
@@ -102,7 +102,7 @@ fn default_path() -> PathBuf {
.map(|h| PathBuf::from(h).join(".cache"))
})
.unwrap_or_else(std::env::temp_dir);
- base.join("brahman").join("akasha-nous-real-embed-cache.sled")
+ base.join("brahman").join("chasqui-nous-real-embed-cache.sled")
}
fn build_key(file_sha: &[u8; 32], model_id: &str) -> Vec<u8> {
@@ -139,7 +139,7 @@ mod tests {
use super::*;
fn sha(s: &[u8]) -> [u8; 32] {
- ente_cas::sha256_of(s)
+ arje_cas::sha256_of(s)
}
#[test]
diff --git a/crates/modules/akasha/nous-real/src/embeddings.rs b/crates/modules/chasqui/nous-real/src/embeddings.rs
similarity index 96%
rename from crates/modules/akasha/nous-real/src/embeddings.rs
rename to crates/modules/chasqui/nous-real/src/embeddings.rs
index abd9e85..28b0078 100644
--- a/crates/modules/akasha/nous-real/src/embeddings.rs
+++ b/crates/modules/chasqui/nous-real/src/embeddings.rs
@@ -20,7 +20,7 @@ use std::sync::Arc;
use std::time::Instant;
use fastembed::{EmbeddingModel, InitOptions, TextEmbedding};
-use akasha_nous::{
+use chasqui_nous::{
EmbedFilePayload, EmbedRequest, EmbedResponse, EmbedTextPayload, ErrorResponse, PingResponse,
RequestKind,
};
@@ -135,13 +135,13 @@ fn handle_file(
// bajo la semántica del proveedor (el modelo nunca vio los bytes
// adicionales). Si la cabeza cambia, el hash cambia y caemos a
// re-embed naturalmente.
- let file_sha = ente_cas::sha256_of(&buf);
+ let file_sha = arje_cas::sha256_of(&buf);
if let Some(cache) = cache {
if let Some(cached) = cache.get(&file_sha, model_id) {
info!(
path = %p.path,
- sha = %ente_cas::hex(&file_sha),
+ sha = %arje_cas::hex(&file_sha),
bytes = n,
"embed_file: cache HIT"
);
@@ -156,7 +156,7 @@ fn handle_file(
info!(
path = %p.path,
- sha = %ente_cas::hex(&file_sha),
+ sha = %arje_cas::hex(&file_sha),
bytes = n,
"embed_file: cache MISS — invocando modelo"
);
@@ -166,9 +166,9 @@ fn handle_file(
// el cache (sled lo es) pero deja un registro consultable por
// herramientas como `ente-cas gc` y permite que otros consumers
// resuelvan los bytes por hash.
- if let Err(e) = ente_cas::store(&buf) {
+ if let Err(e) = arje_cas::store(&buf) {
// No-fatal: si CAS no escribe, cacheamos el embedding igual.
- warn!(error = %e, "ente_cas::store falló (no-fatal)");
+ warn!(error = %e, "arje_cas::store falló (no-fatal)");
}
let text = String::from_utf8_lossy(&buf).to_string();
diff --git a/crates/modules/akasha/nous-real/src/main.rs b/crates/modules/chasqui/nous-real/src/main.rs
similarity index 89%
rename from crates/modules/akasha/nous-real/src/main.rs
rename to crates/modules/chasqui/nous-real/src/main.rs
index 0a4ea99..8a84f19 100644
--- a/crates/modules/akasha/nous-real/src/main.rs
+++ b/crates/modules/chasqui/nous-real/src/main.rs
@@ -1,21 +1,21 @@
-//! `akasha-nous-real` — proveedor Nous con LLM real (gated por feature).
+//! `chasqui-nous-real` — proveedor Nous con LLM real (gated por feature).
//!
//! ## Build modes
//!
-//! - `cargo build -p akasha-nous-real`
+//! - `cargo build -p chasqui-nous-real`
//! Compila como **stub**: bin que arranca, sidecarea al brahman-init
//! pero rechaza toda request con un error explicando que falta la
//! feature. Útil para que `cargo build --workspace` no requiera ML
//! deps.
//!
-//! - `cargo build -p akasha-nous-real --features embeddings`
+//! - `cargo build -p chasqui-nous-real --features embeddings`
//! Compila con `fastembed` + ONNX Runtime descargado por Cargo.
//! Modelo default: `all-MiniLM-L6-v2` (384-d, ~80 MB descargado al
//! primer run y cacheado en `~/.cache/fastembed`).
//!
//! ## Diseño
//!
-//! Mismo contrato wire que `akasha-nous-mock` (`akasha-nous` crate). La
+//! Mismo contrato wire que `chasqui-nous-mock` (`chasqui-nous` crate). La
//! diferencia operativa: real produce 384-d con semantic content
//! (text-embedding del modelo); mock produce 32-d con metadata-hashing.
//! No son intercambiables a media-deployment — los centroides de
@@ -36,7 +36,7 @@ use brahman_card::{
ulid::Ulid, Card, CardKind, ContextBias, Flow, Flows, Lifecycle, Payload, Priority,
Supervision, TypeRef,
};
-use akasha_nous::{transport, FLOW_EMBED_REQUEST, FLOW_EMBED_RESULT, FLOW_TYPE_NAME};
+use chasqui_nous::{transport, FLOW_EMBED_REQUEST, FLOW_EMBED_RESULT, FLOW_TYPE_NAME};
use tokio::net::UnixListener;
use tracing::info;
@@ -63,11 +63,11 @@ async fn main() -> std::io::Result<()> {
#[cfg(not(feature = "embeddings"))]
info!(
- "akasha-nous-real corriendo en modo STUB (compilá con \
+ "chasqui-nous-real corriendo en modo STUB (compilá con \
--features embeddings para activar el modelo)"
);
- // 1. Resolver socket del data-plane (default `akasha-nous-real.sock`,
+ // 1. Resolver socket del data-plane (default `chasqui-nous-real.sock`,
// distinto del mock para coexistir).
let sock_path = transport::provider_socket_path("real");
if sock_path.exists() {
@@ -77,7 +77,7 @@ async fn main() -> std::io::Result<()> {
std::fs::create_dir_all(parent)?;
}
let listener = UnixListener::bind(&sock_path)?;
- info!(socket = %sock_path.display(), "akasha-nous-real escuchando");
+ info!(socket = %sock_path.display(), "chasqui-nous-real escuchando");
// 2. Sidecar al brahman-init con Card declarando el socket.
let card = build_card(sock_path.clone());
@@ -144,7 +144,7 @@ fn init_tracing() {
}
/// Card que real-nous anuncia. Idéntica al mock excepto por:
-/// - label distinto (`akasha.nous_real`) para que coexistan en el broker.
+/// - label distinto (`chasqui.nous_real`) para que coexistan en el broker.
/// - `priority_contexts.prod = +1` (gana en contexto prod).
/// - `service_socket` propio para que clientes lo descubran directo.
fn build_card(service_socket: std::path::PathBuf) -> Card {
@@ -160,7 +160,7 @@ fn build_card(service_socket: std::path::PathBuf) -> Card {
Card {
schema_version: brahman_card::CARD_SCHEMA_VERSION,
id: Ulid::new(),
- label: "akasha.nous_real".into(),
+ label: "chasqui.nous_real".into(),
payload: Payload::Virtual,
supervision: Supervision::Delegate,
lifecycle: Lifecycle::Daemon,
diff --git a/crates/modules/akasha/nous-real/src/stub.rs b/crates/modules/chasqui/nous-real/src/stub.rs
similarity index 84%
rename from crates/modules/akasha/nous-real/src/stub.rs
rename to crates/modules/chasqui/nous-real/src/stub.rs
index 8665960..78004aa 100644
--- a/crates/modules/akasha/nous-real/src/stub.rs
+++ b/crates/modules/chasqui/nous-real/src/stub.rs
@@ -1,7 +1,7 @@
//! Modo stub: arranca el bin pero rechaza las requests con un error
//! que explica que falta la feature `embeddings`.
-use akasha_nous::{EmbedRequest, ErrorResponse};
+use chasqui_nous::{EmbedRequest, ErrorResponse};
use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader};
use tokio::net::UnixStream;
use tracing::warn;
@@ -21,8 +21,8 @@ pub async fn handle_conn(stream: UnixStream) -> std::io::Result<()> {
let resp = ErrorResponse {
error: format!(
- "akasha-nous-real compilado sin la feature `embeddings`. \
- Rebuild con: cargo build -p akasha-nous-real --features embeddings"
+ "chasqui-nous-real compilado sin la feature `embeddings`. \
+ Rebuild con: cargo build -p chasqui-nous-real --features embeddings"
),
};
let mut stream = reader.into_inner();
diff --git a/crates/modules/akasha/nous/Cargo.toml b/crates/modules/chasqui/nous/Cargo.toml
similarity index 95%
rename from crates/modules/akasha/nous/Cargo.toml
rename to crates/modules/chasqui/nous/Cargo.toml
index 29d0bf4..db8df3f 100644
--- a/crates/modules/akasha/nous/Cargo.toml
+++ b/crates/modules/chasqui/nous/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "akasha-nous"
+name = "chasqui-nous"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
diff --git a/crates/modules/akasha/nous/src/lib.rs b/crates/modules/chasqui/nous/src/lib.rs
similarity index 92%
rename from crates/modules/akasha/nous/src/lib.rs
rename to crates/modules/chasqui/nous/src/lib.rs
index 4a6b957..d85e37d 100644
--- a/crates/modules/akasha/nous/src/lib.rs
+++ b/crates/modules/chasqui/nous/src/lib.rs
@@ -1,6 +1,6 @@
-//! `akasha-nous` — el contrato del proveedor de embeddings.
+//! `chasqui-nous` — el contrato del proveedor de embeddings.
//!
-//! Define el wire-format compartido entre `akasha-core` (consumidor) y
+//! Define el wire-format compartido entre `chasqui-core` (consumidor) y
//! cualquier implementación de Nous (mock determinista o LLM real). El
//! protocolo es **line-delimited JSON** sobre Unix socket: cada conexión
//! envía una request, recibe una response, y cierra. Single-shot por
@@ -21,8 +21,8 @@
//!
//! ## Por qué un crate aparte
//!
-//! El consumidor (akasha-core) y el proveedor (akasha-nous-mock,
-//! akasha-nous-real) deben acordar en types EXACTOS. Tener el contrato
+//! El consumidor (chasqui-core) y el proveedor (chasqui-nous-mock,
+//! chasqui-nous-real) deben acordar en types EXACTOS. Tener el contrato
//! en su crate evita que cada lado declare structs paralelos que se
//! desincronizan. Si bumpeás el wire, bumpeás aquí.
//!
@@ -32,7 +32,7 @@
//! el mismo `flow.output: { name: "embed-result", type: ... }` y
//! `flow.input: "embed-request"`. El broker brahman los matchea contra
//! los consumidores; el `priority_offset` per-contexto del Card hace que
-//! mock-nous gane en `test` y real-nous en `prod`. akasha-core sólo
+//! mock-nous gane en `test` y real-nous en `prod`. chasqui-core sólo
//! consume el flow, sin saber cuál implementación corre.
#![forbid(unsafe_code)]
@@ -118,7 +118,7 @@ pub mod transport {
pub const SOCKET_ENV: &str = "NOUSER_NOUS_SOCKET";
/// Nombre genérico del socket cuando hay un solo proveedor.
- pub const SOCKET_NAME: &str = "akasha-nous.sock";
+ pub const SOCKET_NAME: &str = "chasqui-nous.sock";
/// Ruta canónica al socket cuando un único proveedor está activo
/// (consumidores que no quieren elegir).
@@ -136,7 +136,7 @@ pub mod transport {
if let Ok(p) = std::env::var(SOCKET_ENV) {
return PathBuf::from(p);
}
- runtime_base().join(format!("akasha-nous-{}.sock", provider))
+ runtime_base().join(format!("chasqui-nous-{}.sock", provider))
}
fn runtime_base() -> PathBuf {
diff --git a/crates/modules/fana/SDD.md b/crates/modules/fana/SDD.md
new file mode 100644
index 0000000..32f5d5d
--- /dev/null
+++ b/crates/modules/fana/SDD.md
@@ -0,0 +1,71 @@
+# modules/fana/ — Writer DAG editor (absorbe pluma)
+
+**Propósito.** Editor de escritura multidimensional: el documento es un
+DAG de átomos narrativos con ramas (timelines), tracking de coherencia,
+e indexación semántica. Absorbe el linaje markdown de `pluma`. Prioridad
+alta entre las apps.
+
+## Estado
+
+- **Existente (de pluma)**: `fana-md` (parser markdown, ex `pluma-md`),
+ `fana-md-reader-web` (lector DOM, ex `pluma-reader-web`, aún dep de
+ `gioser-web`).
+- **Planeado**: el resto de sub-crates (writer DAG editor completo).
+
+## Crates (objetivo)
+
+| crate | tipo | rol |
+| ---------------------- | ---- | ---------------------------------------------------- |
+| `fana-core` | lib | `NarrativeAtom` + `NarrativeGraph` + `CoherenceState`|
+| `fana-md` | lib | Parser markdown (ex pluma-md) |
+| `fana-graph` | lib | DAG ops + `propagate_mutation` topológico |
+| `fana-semantic` | lib | Cliente `verbo` + scoring de intensidad adjetiva |
+| `fana-store` | lib | Persistencia sled/RocksDB + bincode/rkyv zero-copy |
+| `fana-llm` | lib | Cliente HTTP a LLMs remotos (evaluación + merge) |
+| `fana-render-plan` | lib | DrawCommands agnósticos (editor + sidepane + ghost) |
+| `fana-editor-gpui` | lib | WorkspaceEditor View + OscilloscopeSidepane + Ghost |
+| `fana-md-reader-web` | lib | Lector markdown DOM (ex pluma-reader-web) |
+| `fana-editor-web` | lib | (futuro) editor WASM |
+
+## Modelo de datos
+
+```rust
+enum CoherenceState { Valid, InConflict { origin, reason }, PendingEvaluation }
+
+struct NarrativeAtom {
+ id: Uuid,
+ content_hash: [u8; 32], // SHA-256 estricto
+ content: Arc<String>, // texto compartido (zero-alloc al ramificar)
+ semantic_vectors: HashMap<String, f32>, // concepto → intensidad
+ dependencies: Vec<Uuid>, // nodos prerrequisito
+ branch_id: String,
+ coherence: CoherenceState,
+}
+
+struct NarrativeGraph {
+ nodes: HashMap<Uuid, NarrativeAtom>,
+ adjacency_list: HashMap<Uuid, Vec<Uuid>>, // padre → hijos dependientes
+}
+```
+
+## Dependencias
+
+- `fana-semantic` ← `verbo` (embeddings, instancia modelo ligero ~384d).
+- `fana-md` puro (sin deps de host).
+- `fana-md-reader-web` + `fana-editor-web` ← `wasm-bindgen`, `web-sys`.
+- `fana-editor-gpui` ← `gpui`, `nahual`.
+- `gioser-web` sigue consumiendo `fana-md-reader-web`.
+
+## Invariantes
+
+- Toda mutación de texto valida contra el hash binario del contenido.
+- Branches comparten texto vía `Arc<String>` — clonar una rama es O(1).
+- `propagate_mutation` marca `PendingEvaluation` en cascada topológica
+ cuando un átomo origen cambia (shock-wave lógica).
+- Separabilidad UI estricta: `fana-core/md/graph/semantic/store/llm/
+ render-plan` agnósticos; `fana-editor-{gpui,web}` intercambiables.
+
+## Apps
+
+- `apps/fana` — binario GPUI (prioridad alta).
+- `apps/fana-web` — (futuro) cdylib WASM.
diff --git a/crates/modules/pluma/pluma-reader-web/Cargo.toml b/crates/modules/fana/fana-md-reader-web/Cargo.toml
similarity index 87%
rename from crates/modules/pluma/pluma-reader-web/Cargo.toml
rename to crates/modules/fana/fana-md-reader-web/Cargo.toml
index 47faec3..6d8de30 100644
--- a/crates/modules/pluma/pluma-reader-web/Cargo.toml
+++ b/crates/modules/fana/fana-md-reader-web/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "pluma-reader-web"
+name = "fana-md-reader-web"
version.workspace = true
edition.workspace = true
license.workspace = true
@@ -7,7 +7,7 @@ authors.workspace = true
publish.workspace = true
[dependencies]
-pluma-md = { path = "../pluma-md" }
+fana-md = { path = "../fana-md" }
wasm-bindgen.workspace = true
wasm-bindgen-futures.workspace = true
js-sys.workspace = true
diff --git a/crates/modules/pluma/pluma-reader-web/src/lib.rs b/crates/modules/fana/fana-md-reader-web/src/lib.rs
similarity index 98%
rename from crates/modules/pluma/pluma-reader-web/src/lib.rs
rename to crates/modules/fana/fana-md-reader-web/src/lib.rs
index 4b242ef..4aca214 100644
--- a/crates/modules/pluma/pluma-reader-web/src/lib.rs
+++ b/crates/modules/fana/fana-md-reader-web/src/lib.rs
@@ -53,7 +53,7 @@ impl Reader {
/// Renderea un string markdown directamente, sin fetch.
pub fn render_md(&self, md: &str, theme: &str) {
- let html = pluma_md::to_themed_html(md, theme);
+ let html = fana_md::to_themed_html(md, theme);
self.container.set_inner_html(&html);
}
diff --git a/crates/modules/pluma/pluma-md/Cargo.toml b/crates/modules/fana/fana-md/Cargo.toml
similarity index 91%
rename from crates/modules/pluma/pluma-md/Cargo.toml
rename to crates/modules/fana/fana-md/Cargo.toml
index bde0357..515704f 100644
--- a/crates/modules/pluma/pluma-md/Cargo.toml
+++ b/crates/modules/fana/fana-md/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "pluma-md"
+name = "fana-md"
version.workspace = true
edition.workspace = true
license.workspace = true
diff --git a/crates/modules/pluma/pluma-md/src/lib.rs b/crates/modules/fana/fana-md/src/lib.rs
similarity index 100%
rename from crates/modules/pluma/pluma-md/src/lib.rs
rename to crates/modules/fana/fana-md/src/lib.rs
diff --git a/crates/modules/nahual/widgets/app-header/src/lib.rs b/crates/modules/nahual/widgets/app-header/src/lib.rs
index eb94300..ee7b352 100644
--- a/crates/modules/nahual/widgets/app-header/src/lib.rs
+++ b/crates/modules/nahual/widgets/app-header/src/lib.rs
@@ -8,7 +8,7 @@
//! border-bottom = `theme.border`.
//! - Padding 16/12, text_size 14.
//!
-//! Patrón emergente: `nakui-explorer`, `akasha-explorer`,
+//! Patrón emergente: `nakui-explorer`, `chasqui-explorer`,
//! `minga-explorer`, `brahman-broker-explorer` declaran headers
//! idénticos sólo cambiando el label. Ahora es 1 línea.
//!
diff --git a/crates/modules/pluma/SDD.md b/crates/modules/pluma/SDD.md
deleted file mode 100644
index 2702e74..0000000
--- a/crates/modules/pluma/SDD.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# modules/pluma/ — Markdown agnóstico + visor web
-
-**Propósito.** Parser de markdown que no asume host: produce un árbol
-de `Block`. El visor web fetch-ea un `.md` y lo inyecta como HTML,
-respetando `data-pluma-theme` del contenedor.
-
-## Crates
-
-| crate | tipo | rol |
-| -------------------- | ---- | ------------------------------------------------ |
-| `pluma-md` | lib | Wrapper sobre `pulldown-cmark` con AST simple |
-| `pluma-reader-web` | lib | Reader DOM: fetch + inject HTML + theming |
-
-## Dependencias
-
-- `pluma-md` ← `pulldown-cmark` (sin features de host).
-- `pluma-reader-web` ← `wasm-bindgen` + `web-sys` (HtmlElement, Response).
-- Consumido por: `apps/gioser-web` (renderea los 4 tips elementales
- desde `md/agua.md`, `md/aire.md`, `md/fuego.md`, `md/tierra.md`).
-
-## Estado
-
-LOC 178. Funcional y pequeño. Sin tests (todavía). Pendiente: AST
-con todos los inline elements (links, emphasis) accesibles desde Rust.
diff --git a/crates/modules/vista/SDD.md b/crates/modules/revista/SDD.md
similarity index 63%
rename from crates/modules/vista/SDD.md
rename to crates/modules/revista/SDD.md
index d9cffe7..2f570fb 100644
--- a/crates/modules/vista/SDD.md
+++ b/crates/modules/revista/SDD.md
@@ -1,4 +1,4 @@
-# modules/vista/ — Deck horizontal swipe (PageView)
+# modules/revista/ — Deck horizontal swipe (PageView)
**Propósito.** Carousel/PageView estilo Flutter: gesto horizontal con
snap a página, distinción horizontal vs vertical, soporte mouse +
@@ -8,15 +8,15 @@ touch + pointer events. Lógica separada del binding DOM.
| crate | tipo | rol |
| ------------- | ---- | --------------------------------------------------------- |
-| `vista-core` | lib | `DeckState` agnóstico: pointer_down/move/end → outcomes |
-| `vista-web` | lib | Binding DOM sobre `<strip>`: traduce eventos + aplica CSS |
+| `revista-core` | lib | `DeckState` agnóstico: pointer_down/move/end → outcomes |
+| `revista-web` | lib | Binding DOM sobre `<strip>`: traduce eventos + aplica CSS |
## Dependencias
-- `vista-core`: sin deps externas. Pura state machine.
-- `vista-web` ← `vista-core`, `wasm-bindgen`, `web-sys` (PointerEvent).
+- `revista-core`: sin deps externas. Pura state machine.
+- `revista-web` ← `revista-core`, `wasm-bindgen`, `web-sys` (PointerEvent).
-## API agnóstica (vista-core)
+## API agnóstica (revista-core)
```rust
let mut deck = DeckState::new();
@@ -35,6 +35,6 @@ if let Some(r) = deck.pointer_end(offset, width, n_pages) {
## Estado
-vista-core: 5 tests verdes (drag decision + snap + clamp + goto).
-vista-web: binding DOM intacto, ahora delega toda la lógica a core.
+revista-core: 5 tests verdes (drag decision + snap + clamp + goto).
+revista-web: binding DOM intacto, ahora delega toda la lógica a core.
LOC core 177 + web ~355. Reutilizable en backends no-web.
diff --git a/crates/modules/vista/vista-core/Cargo.toml b/crates/modules/revista/revista-core/Cargo.toml
similarity index 91%
rename from crates/modules/vista/vista-core/Cargo.toml
rename to crates/modules/revista/revista-core/Cargo.toml
index 7024e70..b041cd7 100644
--- a/crates/modules/vista/vista-core/Cargo.toml
+++ b/crates/modules/revista/revista-core/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "vista-core"
+name = "revista-core"
description = "Vista — máquina de estados agnóstica para deck horizontal con snap. Sin dependencias web/DOM."
version.workspace = true
edition.workspace = true
diff --git a/crates/modules/vista/vista-core/src/lib.rs b/crates/modules/revista/revista-core/src/lib.rs
similarity index 100%
rename from crates/modules/vista/vista-core/src/lib.rs
rename to crates/modules/revista/revista-core/src/lib.rs
diff --git a/crates/modules/vista/vista-web/Cargo.toml b/crates/modules/revista/revista-web/Cargo.toml
similarity index 87%
rename from crates/modules/vista/vista-web/Cargo.toml
rename to crates/modules/revista/revista-web/Cargo.toml
index 046e05a..d93603a 100644
--- a/crates/modules/vista/vista-web/Cargo.toml
+++ b/crates/modules/revista/revista-web/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "vista-web"
+name = "revista-web"
version.workspace = true
edition.workspace = true
license.workspace = true
@@ -7,7 +7,7 @@ authors.workspace = true
publish.workspace = true
[dependencies]
-vista-core = { path = "../vista-core" }
+revista-core = { path = "../revista-core" }
wasm-bindgen.workspace = true
js-sys.workspace = true
diff --git a/crates/modules/vista/vista-web/src/lib.rs b/crates/modules/revista/revista-web/src/lib.rs
similarity index 99%
rename from crates/modules/vista/vista-web/src/lib.rs
rename to crates/modules/revista/revista-web/src/lib.rs
index 6e85707..738616d 100644
--- a/crates/modules/vista/vista-web/src/lib.rs
+++ b/crates/modules/revista/revista-web/src/lib.rs
@@ -20,7 +20,7 @@
use std::cell::RefCell;
use std::rc::Rc;
-use vista_core::{DeckState, DragOutcome};
+use revista_core::{DeckState, DragOutcome};
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use web_sys::{Event, HtmlElement, PointerEvent};
diff --git a/crates/modules/shuma/shuma-core/Cargo.toml b/crates/modules/shuma/shuma-core/Cargo.toml
index a9b628a..346d645 100644
--- a/crates/modules/shuma/shuma-core/Cargo.toml
+++ b/crates/modules/shuma/shuma-core/Cargo.toml
@@ -6,13 +6,13 @@ rust-version.workspace = true
license.workspace = true
authors.workspace = true
publish.workspace = true
-description = "Runtime de shipote: WorkspaceManager sobre ente-incarnate. Estado in-memory, lifecycle, reaping."
+description = "Runtime de shuma: WorkspaceManager sobre arje-incarnate. Estado in-memory, lifecycle, reaping."
[dependencies]
shuma-card = { path = "../shuma-card" }
shuma-discern = { path = "../shuma-discern" }
brahman-card = { path = "../../../protocol/brahman-card" }
-ente-incarnate = { path = "../../../init/ente-incarnate" }
+arje-incarnate = { path = "../../../init/arje-incarnate" }
nix = { workspace = true }
libc = { workspace = true }
anyhow = { workspace = true }
diff --git a/crates/modules/shuma/shuma-core/src/lib.rs b/crates/modules/shuma/shuma-core/src/lib.rs
index 4bc2423..5ae41c2 100644
--- a/crates/modules/shuma/shuma-core/src/lib.rs
+++ b/crates/modules/shuma/shuma-core/src/lib.rs
@@ -18,7 +18,7 @@ pub mod pipeline;
pub mod stats;
use brahman_card::{Card, Payload, Supervision};
-use ente_incarnate::{Incarnator, IncarnatorConfig};
+use arje_incarnate::{Incarnator, IncarnatorConfig};
use nix::sys::signal::{kill, Signal};
use nix::sys::wait::{waitpid, WaitPidFlag, WaitStatus};
use nix::unistd::Pid;
@@ -38,7 +38,7 @@ pub enum CoreError {
#[error("compile: {0}")]
Compile(#[from] shuma_card::CompileError),
#[error("incarnate: {0}")]
- Incarnate(#[from] ente_incarnate::IncarnateError),
+ Incarnate(#[from] arje_incarnate::IncarnateError),
}
#[derive(Debug)]
@@ -682,9 +682,9 @@ impl WorkspaceManager {
// hace OOM kill al exceder memory.max — enforcement automático
// sin policy adicional. Falla silenciosa si no hay delegation.
if !spec.soma.cgroup.path.is_empty() {
- if let Ok(abs) = ente_incarnate::cgroup::ensure_cgroup(&spec.soma.cgroup) {
+ if let Ok(abs) = arje_incarnate::cgroup::ensure_cgroup(&spec.soma.cgroup) {
let applied =
- ente_incarnate::cgroup::apply_rlimits_to_cgroup(&abs, &spec.soma.rlimits);
+ arje_incarnate::cgroup::apply_rlimits_to_cgroup(&abs, &spec.soma.rlimits);
if !applied.is_empty() {
warnings.push(format!("cgroup limits applied: {}", applied.join(", ")));
}
@@ -842,11 +842,11 @@ impl WorkspaceManager {
use std::os::fd::IntoRawFd;
let (sout_r, sout_w) =
nix::unistd::pipe2(nix::fcntl::OFlag::O_CLOEXEC).map_err(|e| {
- CoreError::Incarnate(ente_incarnate::IncarnateError::Pipe(e))
+ CoreError::Incarnate(arje_incarnate::IncarnateError::Pipe(e))
})?;
let (serr_r, serr_w) =
nix::unistd::pipe2(nix::fcntl::OFlag::O_CLOEXEC).map_err(|e| {
- CoreError::Incarnate(ente_incarnate::IncarnateError::Pipe(e))
+ CoreError::Incarnate(arje_incarnate::IncarnateError::Pipe(e))
})?;
let sout_r_fd = sout_r.into_raw_fd();
let sout_w_fd = sout_w.into_raw_fd();
@@ -856,7 +856,7 @@ impl WorkspaceManager {
let stdout_buf = logbuf::LogBuf::new();
let stderr_buf = logbuf::LogBuf::new();
- let stdio = ente_incarnate::ChildStdio {
+ let stdio = arje_incarnate::ChildStdio {
stdin_fd: None,
stdout_fd: Some(sout_w_fd),
stderr_fd: Some(serr_w_fd),
diff --git a/crates/modules/shuma/shuma-core/src/persist.rs b/crates/modules/shuma/shuma-core/src/persist.rs
index c958028..e9ab8a7 100644
--- a/crates/modules/shuma/shuma-core/src/persist.rs
+++ b/crates/modules/shuma/shuma-core/src/persist.rs
@@ -282,7 +282,7 @@ pub struct RestoreOutcome {
mod tests {
use super::*;
use crate::WorkspaceManager;
- use ente_incarnate::IncarnatorConfig;
+ use arje_incarnate::IncarnatorConfig;
use shuma_card::{ExitPolicy, WorkspaceSpec};
use std::sync::Arc;
diff --git a/crates/modules/shuma/shuma-core/src/pipeline.rs b/crates/modules/shuma/shuma-core/src/pipeline.rs
index 68a7b55..804adee 100644
--- a/crates/modules/shuma/shuma-core/src/pipeline.rs
+++ b/crates/modules/shuma/shuma-core/src/pipeline.rs
@@ -1,7 +1,7 @@
//! Pipeline runtime: encadena nodos con pipes y opcionalmente intercepta
//! cada flow para discernir su contenido.
//!
-//! Cada nodo se encarna via [`ente_incarnate::Incarnator`] — eso significa
+//! Cada nodo se encarna via [`arje_incarnate::Incarnator`] — eso significa
//! que **cada comando puede tener su propio SomaSpec** (namespaces, cgroup,
//! rlimits) heredado del workspace. La conexión stdin↔stdout se hace con
//! `pipe2(2)` + `ChildStdio` declarativo: el callback de clone(2) hace los
@@ -9,7 +9,7 @@
use crate::CoreError;
use brahman_card::Payload;
-use ente_incarnate::{ChildStdio, Incarnator};
+use arje_incarnate::{ChildStdio, Incarnator};
use nix::fcntl::OFlag;
use nix::unistd::pipe2;
use shuma_card::PipelineSpec;
@@ -87,7 +87,7 @@ pub async fn run_pipeline(
let mut edge_w: Vec<RawFd> = vec![-1; spec.edges.len()];
for i in 0..spec.edges.len() {
let (r, w) = pipe2(OFlag::O_CLOEXEC).map_err(|e| {
- CoreError::Incarnate(ente_incarnate::IncarnateError::Pipe(e))
+ CoreError::Incarnate(arje_incarnate::IncarnateError::Pipe(e))
})?;
edge_r[i] = r.into_raw_fd();
edge_w[i] = w.into_raw_fd();
@@ -110,7 +110,7 @@ pub async fn run_pipeline(
}
// Splitter: pipe propio para el productor → splitter lee y replica a edge_w[*].
let (prod_r, prod_w) = pipe2(OFlag::O_CLOEXEC).map_err(|e| {
- CoreError::Incarnate(ente_incarnate::IncarnateError::Pipe(e))
+ CoreError::Incarnate(arje_incarnate::IncarnateError::Pipe(e))
})?;
producer_stdout_fd[i] = Some(prod_w.into_raw_fd());
let prod_r_fd = prod_r.into_raw_fd();
@@ -147,7 +147,7 @@ pub async fn run_pipeline(
// Merger: lee de N edge_r y escribe a un nuevo pipe cuyo
// read end es el stdin del consumer.
let (cons_r, cons_w) = pipe2(OFlag::O_CLOEXEC).map_err(|e| {
- CoreError::Incarnate(ente_incarnate::IncarnateError::Pipe(e))
+ CoreError::Incarnate(arje_incarnate::IncarnateError::Pipe(e))
})?;
consumer_stdin_fd[j] = Some(cons_r.into_raw_fd());
let inputs: Vec<RawFd> = predecessors[j]
@@ -169,7 +169,7 @@ pub async fn run_pipeline(
Payload::Native { .. } | Payload::Legacy { .. } => {}
_ => {
return Err(CoreError::Incarnate(
- ente_incarnate::IncarnateError::NonExecutablePayload,
+ arje_incarnate::IncarnateError::NonExecutablePayload,
))
}
}
@@ -638,7 +638,7 @@ fn _keep_raw(_: &dyn AsRawFd) {}
mod tests {
use super::*;
use brahman_card::Payload;
- use ente_incarnate::IncarnatorConfig;
+ use arje_incarnate::IncarnatorConfig;
use shuma_card::{CommandRef, DiscernPolicy, FlowEdge, PipelineSpec, WorkspaceId};
fn cmd(label: &str, exec: &str, argv: &[&str]) -> CommandRef {
diff --git a/crates/modules/shuma/shuma-discern/src/lib.rs b/crates/modules/shuma/shuma-discern/src/lib.rs
index 6b2d3a7..e156fa9 100644
--- a/crates/modules/shuma/shuma-discern/src/lib.rs
+++ b/crates/modules/shuma/shuma-discern/src/lib.rs
@@ -2,7 +2,7 @@
//!
//! Trait + pipeline + discerners default. Devuelve un [`Discernment`] con
//! `TypeRef` consistente con el broker, confidence, MIME y un `lens` hint
-//! para UIs (reusa el espíritu del `dominant_lens` de akasha).
+//! para UIs (reusa el espíritu del `dominant_lens` de chasqui).
#![forbid(unsafe_code)]
diff --git a/crates/protocol/SDD.md b/crates/protocol/SDD.md
index c532e72..d1282f4 100644
--- a/crates/protocol/SDD.md
+++ b/crates/protocol/SDD.md
@@ -16,7 +16,7 @@ flows por tipo, y wire types de red. No corre lógica de dominio.
| `brahman-admin` | lib | Socket admin separado: snapshots de sesiones+matches |
| `brahman-sidecar` | lib | `spawn(card)` para que apps se presenten al Init |
| `brahman-net` | lib | Malla libp2p opcional (TCP+noise+yamux+kad) |
-| `ente-card` | lib | Alias legacy — re-export de `brahman-card` |
+| `arje-card` | lib | Alias legacy — re-export de `brahman-card` |
## Struct `Card` (anatomía completa)
diff --git a/crates/protocol/ente-card/Cargo.toml b/crates/protocol/arje-card/Cargo.toml
similarity index 93%
rename from crates/protocol/ente-card/Cargo.toml
rename to crates/protocol/arje-card/Cargo.toml
index b4dcdfc..ff00485 100644
--- a/crates/protocol/ente-card/Cargo.toml
+++ b/crates/protocol/arje-card/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "ente-card"
+name = "arje-card"
version = "0.0.1"
edition.workspace = true
license.workspace = true
diff --git a/crates/protocol/ente-card/src/lib.rs b/crates/protocol/arje-card/src/lib.rs
similarity index 100%
rename from crates/protocol/ente-card/src/lib.rs
rename to crates/protocol/arje-card/src/lib.rs
diff --git a/crates/protocol/brahman-card/src/lib.rs b/crates/protocol/brahman-card/src/lib.rs
index 0cda3b0..d9f5167 100644
--- a/crates/protocol/brahman-card/src/lib.rs
+++ b/crates/protocol/brahman-card/src/lib.rs
@@ -1187,7 +1187,7 @@ mod tests {
#[test]
fn wirecard_postcard_with_priority_contexts() {
- // Repro del bug que rompía akasha-nous-mock: ContextBias con
+ // Repro del bug que rompía chasqui-nous-mock: ContextBias con
// skip_serializing_if causaba que postcard leyera bytes
// equivocados. Sin esos atributos, el roundtrip es estable.
let src = r#"{
@@ -1266,8 +1266,8 @@ mod tests {
#[test]
fn new_assigns_real_ulid_and_label() {
- let c = Card::new("akasha.engine");
- assert_eq!(c.label, "akasha.engine");
+ let c = Card::new("chasqui.engine");
+ assert_eq!(c.label, "chasqui.engine");
assert_ne!(c.id, Ulid::nil(), "Card::new no debe dejar id en nil");
}
diff --git a/crates/protocol/brahman-cards/Cargo.toml b/crates/protocol/brahman-cards/Cargo.toml
index 6e15a05..9e955d5 100644
--- a/crates/protocol/brahman-cards/Cargo.toml
+++ b/crates/protocol/brahman-cards/Cargo.toml
@@ -14,7 +14,7 @@ serde_json = { workspace = true }
thiserror = { workspace = true }
ulid = { workspace = true }
brahman-card = { path = "../brahman-card" }
-akasha-card = { path = "../../modules/akasha/card" }
+chasqui-card = { path = "../../modules/chasqui/card" }
nahual-meta-schema = { path = "../../modules/nahual/libs/meta-schema" }
nickel-lang = "2.0.0"
diff --git a/crates/protocol/brahman-cards/src/lib.rs b/crates/protocol/brahman-cards/src/lib.rs
index d6b5a6e..3649bb8 100644
--- a/crates/protocol/brahman-cards/src/lib.rs
+++ b/crates/protocol/brahman-cards/src/lib.rs
@@ -12,7 +12,7 @@
//! ```text
//! ┌─────────────┐ ┌──────────────┐ ┌─────────────┐
//! │ Ente JSON │ │ Monad JSON │ │ UiModule │ … futuro
-//! │ (brahman- │ │ (akasha- │ │ (nakui-ui- │
+//! │ (brahman- │ │ (chasqui- │ │ (nakui-ui- │
//! │ card) │ │ card) │ │ schema) │
//! └─────┬───────┘ └──────┬───────┘ └──────┬──────┘
//! │ │ │
@@ -48,7 +48,7 @@ use serde_json::Value;
use thiserror::Error;
pub use brahman_card::Card as EnteCard;
-pub use akasha_card::MonadManifest;
+pub use chasqui_card::MonadManifest;
pub use nahual_meta_schema::Module as UiModuleSpec;
/// Estructura canónica única que consumen los downstream del sistema
diff --git a/crates/protocol/brahman-cards/src/readers.rs b/crates/protocol/brahman-cards/src/readers.rs
index 700fec8..78f23de 100644
--- a/crates/protocol/brahman-cards/src/readers.rs
+++ b/crates/protocol/brahman-cards/src/readers.rs
@@ -69,10 +69,10 @@ impl CardReader for EnteJsonReader {
}
// ============================================================================
-// Monad (akasha-card)
+// Monad (chasqui-card)
// ============================================================================
-/// Reader para el shape JSON de [`akasha_card::MonadManifest`].
+/// Reader para el shape JSON de [`chasqui_card::MonadManifest`].
///
/// Heurística: tiene `members` (BTreeSet<FileId>) Y `cardinality`
/// (u32). La combinación es exclusiva del MonadManifest.
diff --git a/crates/protocol/brahman-handshake/tests/network_discovery.rs b/crates/protocol/brahman-handshake/tests/network_discovery.rs
index 259d1db..a84bac7 100644
--- a/crates/protocol/brahman-handshake/tests/network_discovery.rs
+++ b/crates/protocol/brahman-handshake/tests/network_discovery.rs
@@ -21,7 +21,7 @@
//! vía la conexión directa establecida en step 2 y obtiene el record
//! del store local de A.
//! - El test usa flow `monad-list:json` por familiaridad (es el flow
-//! real que `akasha daemon` declara). Sirve también como prueba de
+//! real que `chasqui daemon` declara). Sirve también como prueba de
//! que el sistema completo (daemon + DHT) funcionaría con cero
//! cambios en la Card.
diff --git a/crates/protocol/brahman-sidecar/src/discovery.rs b/crates/protocol/brahman-sidecar/src/discovery.rs
index b106fac..02f2949 100644
--- a/crates/protocol/brahman-sidecar/src/discovery.rs
+++ b/crates/protocol/brahman-sidecar/src/discovery.rs
@@ -3,7 +3,7 @@
//! sockets ni reimplementar el patrón a mano.
//!
//! Es la generalización de `discover_producer_socket` del CLI
-//! `akasha attract --remote`: declarás el `TypeRef` que querés
+//! `chasqui attract --remote`: declarás el `TypeRef` que querés
//! consumir y el broker te empuja un `MatchEvent::Available` con el
//! `producer_service_socket` del primer proveedor matched.
//!
@@ -263,8 +263,8 @@ mod tests {
#[test]
fn builder_sets_input_flow_with_primitive_type() {
- let c = build_consumer_card("akasha.cli", "embed-result", "json");
- assert_eq!(c.label, "akasha.cli");
+ let c = build_consumer_card("chasqui.cli", "embed-result", "json");
+ assert_eq!(c.label, "chasqui.cli");
assert_eq!(c.kind, CardKind::Ente);
assert!(matches!(c.lifecycle, Lifecycle::Oneshot));
assert!(matches!(c.supervision, Supervision::OneShot));
diff --git a/crates/protocol/brahman-sidecar/src/lib.rs b/crates/protocol/brahman-sidecar/src/lib.rs
index c10dc45..d9a49cb 100644
--- a/crates/protocol/brahman-sidecar/src/lib.rs
+++ b/crates/protocol/brahman-sidecar/src/lib.rs
@@ -95,7 +95,7 @@ pub fn spawn_with_handle(config: SidecarConfig) -> std::io::Result<JoinHandle<()
/// Pool consolidado: un único thread con un runtime tokio
/// `current_thread` que hostea N tasks de sidecar simultáneas.
///
-/// Para módulos con muchas sesiones (p. ej. `akasha daemon` publicando
+/// Para módulos con muchas sesiones (p. ej. `chasqui daemon` publicando
/// 50+ Mónadas), evita el costo de tener un thread+runtime por cada
/// sesión.
///
@@ -111,7 +111,7 @@ pub struct SidecarPool {
handle: tokio::runtime::Handle,
/// Sesiones vivas indexadas por `Card.id`. Permite que un nuevo
/// `spawn` con el mismo id aborte la sesión previa — útil cuando
- /// un módulo (p. ej. `akasha daemon`) re-publica una Mónada cuya
+ /// un módulo (p. ej. `chasqui daemon`) re-publica una Mónada cuya
/// composición cambió.
sessions: Arc<Mutex<HashMap<Ulid, AbortHandle>>>,
_thread: JoinHandle<()>,
diff --git a/crates/runtime/SDD.md b/crates/runtime/SDD.md
index d16d78e..1ac0f0a 100644
--- a/crates/runtime/SDD.md
+++ b/crates/runtime/SDD.md
@@ -8,18 +8,18 @@ rule engine + audit log, y un ente de smoke test.
| crate | tipo | rol |
| ------------- | ---- | ----------------------------------------------------------- |
-| `ente-bus` | lib | Unix SOCK_STREAM + postcard framing. Announce/Invoke/List |
-| `ente-cas` | lib | Content-addressed storage SHA-256: blobs Wasm + audit log |
-| `ente-wasm` | lib | Encarna `Payload::Wasm` vía `wasmi` en thread dedicado |
-| `ente-brain` | lib | Rule engine + observer estadístico + audit chain con CAS |
-| `ente-echo` | bin | Ente prueba — provee `Capability::Endpoint(echo)` |
+| `arje-bus` | lib | Unix SOCK_STREAM + postcard framing. Announce/Invoke/List |
+| `arje-cas` | lib | Content-addressed storage SHA-256: blobs Wasm + audit log |
+| `arje-wasm` | lib | Encarna `Payload::Wasm` vía `wasmi` en thread dedicado |
+| `arje-brain` | lib | Rule engine + observer estadístico + audit chain con CAS |
+| `arje-echo` | bin | Ente prueba — provee `Capability::Endpoint(echo)` |
## Dependencias
-- `ente-bus` ← `tokio` + `postcard`. Consumido por `init/ente-zero`.
-- `ente-cas` ← `sha2` + `sled`. Consumido por `ente-brain` (audit log)
- y `ente-wasm` (blobs).
-- `ente-brain` ← `ente-bus`, `ente-cas`. Consumido por Init para
+- `arje-bus` ← `tokio` + `postcard`. Consumido por `init/arje-zero`.
+- `arje-cas` ← `sha2` + `sled`. Consumido por `arje-brain` (audit log)
+ y `arje-wasm` (blobs).
+- `arje-brain` ← `arje-bus`, `arje-cas`. Consumido por Init para
observabilidad estadística + reglas declarativas.
## Invariantes
diff --git a/crates/runtime/ente-brain/Cargo.toml b/crates/runtime/arje-brain/Cargo.toml
similarity index 81%
rename from crates/runtime/ente-brain/Cargo.toml
rename to crates/runtime/arje-brain/Cargo.toml
index 5a0196f..a7a6a6e 100644
--- a/crates/runtime/ente-brain/Cargo.toml
+++ b/crates/runtime/arje-brain/Cargo.toml
@@ -1,13 +1,13 @@
[package]
-name = "ente-brain"
+name = "arje-brain"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-cas = { path = "../ente-cas" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-cas = { path = "../arje-cas" }
serde = { workspace = true }
serde_json = { workspace = true }
ulid = { workspace = true }
diff --git a/crates/runtime/ente-brain/examples/brainctl.rs b/crates/runtime/arje-brain/examples/brainctl.rs
similarity index 98%
rename from crates/runtime/ente-brain/examples/brainctl.rs
rename to crates/runtime/arje-brain/examples/brainctl.rs
index 5b051b1..8b9ab9a 100644
--- a/crates/runtime/ente-brain/examples/brainctl.rs
+++ b/crates/runtime/arje-brain/examples/brainctl.rs
@@ -9,7 +9,7 @@
//!
//! Path del socket: $ENTE_BRAIN_SOCK o $XDG_RUNTIME_DIR/ente-brain.sock
-use ente_brain::introspect::{call, IntrospectRequest, IntrospectResponse};
+use arje_brain::introspect::{call, IntrospectRequest, IntrospectResponse};
use std::path::{Path, PathBuf};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::UnixStream;
@@ -164,10 +164,10 @@ fn print_response(r: &IntrospectResponse) {
println!("{} cristales pattern detectados:", ps.len());
for p in ps {
match p {
- ente_brain::crystallize::PatternCrystal::Burst { kind, count, frequency_per_sec } => {
+ arje_brain::crystallize::PatternCrystal::Burst { kind, count, frequency_per_sec } => {
println!(" burst: {kind:?} count={count} freq={frequency_per_sec:.2} Hz");
}
- ente_brain::crystallize::PatternCrystal::Silence { kind, last_count, since_secs } => {
+ arje_brain::crystallize::PatternCrystal::Silence { kind, last_count, since_secs } => {
println!(" silence: {kind:?} last_count={last_count} ausente={since_secs:.1}s");
}
}
diff --git a/crates/runtime/ente-brain/src/audit.rs b/crates/runtime/arje-brain/src/audit.rs
similarity index 97%
rename from crates/runtime/ente-brain/src/audit.rs
rename to crates/runtime/arje-brain/src/audit.rs
index a95e80f..24a8ec0 100644
--- a/crates/runtime/ente-brain/src/audit.rs
+++ b/crates/runtime/arje-brain/src/audit.rs
@@ -125,7 +125,7 @@ impl AuditLog {
/// snapshots externos — el log en memoria sigue intacto.
pub fn persist_to_cas(entry: &AuditEntry) -> anyhow::Result<[u8; 32]> {
let bytes = serde_json::to_vec(entry)?;
- let sha = ente_cas::store(&bytes)?;
+ let sha = arje_cas::store(&bytes)?;
Ok(sha)
}
@@ -142,7 +142,7 @@ impl AuditLog {
for entry in &self.entries {
if entry.seq < self.flushed_count { continue; }
let bytes = canonical_bytes(entry);
- let sha = ente_cas::store(&bytes)?;
+ let sha = arje_cas::store(&bytes)?;
debug_assert_eq!(sha, entry.sha,
"CAS sha != entry.sha — fórmula canónica rota");
last_sha = Some(sha);
@@ -230,7 +230,7 @@ pub fn verify_chain_from_cas(start_sha: [u8; 32]) -> VerificationReport {
let mut last_seen: Option<AuditEntry> = None;
while let Some(sha) = current {
- let path = ente_cas::cas_root().join(ente_cas::hex(&sha));
+ let path = arje_cas::cas_root().join(arje_cas::hex(&sha));
let bytes = match std::fs::read(&path) {
Ok(b) => b,
Err(e) => return VerificationReport {
@@ -241,14 +241,14 @@ pub fn verify_chain_from_cas(start_sha: [u8; 32]) -> VerificationReport {
},
};
// Verificación 1: el blob hashea a la SHA esperada (CAS contract).
- let actual = ente_cas::sha256_of(&bytes);
+ let actual = arje_cas::sha256_of(&bytes);
if actual != sha {
return VerificationReport {
verified,
broken_at_seq: last_seen.as_ref().map(|e| e.seq),
error: Some(format!(
"CAS tamper en {}: expected {} got {}",
- path.display(), ente_cas::hex(&sha), ente_cas::hex(&actual)
+ path.display(), arje_cas::hex(&sha), arje_cas::hex(&actual)
)),
genesis_sha: None,
};
@@ -288,7 +288,7 @@ pub fn reachable_from_head(start_sha: [u8; 32]) -> std::collections::HashSet<[u8
let mut current = Some(start_sha);
while let Some(sha) = current {
if !set.insert(sha) { break; } // ciclo (no debería pasar) — corta
- let path = ente_cas::cas_root().join(ente_cas::hex(&sha));
+ let path = arje_cas::cas_root().join(arje_cas::hex(&sha));
let bytes = match std::fs::read(&path) { Ok(b) => b, Err(_) => break };
let entry: AuditEntry = match serde_json::from_slice(&bytes) {
Ok(e) => e, Err(_) => break,
@@ -305,7 +305,7 @@ pub fn collect_chain_from_cas(start_sha: [u8; 32]) -> anyhow::Result<Vec<AuditEn
let mut entries = Vec::new();
let mut current = Some(start_sha);
while let Some(sha) = current {
- let path = ente_cas::cas_root().join(ente_cas::hex(&sha));
+ let path = arje_cas::cas_root().join(arje_cas::hex(&sha));
let bytes = std::fs::read(&path)?;
let mut entry: AuditEntry = serde_json::from_slice(&bytes)?;
entry.sha = sha;
@@ -370,11 +370,11 @@ fn now_ms() -> u64 {
}
/// SHA256 sobre el entry en forma canónica (sha=[0;32]). Hash y CAS storage
-/// ven los mismos bytes, así que `ente_cas::store(canonical)` devuelve el
+/// ven los mismos bytes, así que `arje_cas::store(canonical)` devuelve el
/// mismo SHA que `compute_sha(entry)`.
fn compute_sha(entry: &AuditEntry) -> [u8; 32] {
let bytes = canonical_bytes(entry);
- ente_cas::sha256_of(&bytes)
+ arje_cas::sha256_of(&bytes)
}
/// Forma canónica: el entry serializado JSON con `sha = [0; 32]`.
diff --git a/crates/runtime/ente-brain/src/autopromote.rs b/crates/runtime/arje-brain/src/autopromote.rs
similarity index 100%
rename from crates/runtime/ente-brain/src/autopromote.rs
rename to crates/runtime/arje-brain/src/autopromote.rs
diff --git a/crates/runtime/ente-brain/src/crystallize.rs b/crates/runtime/arje-brain/src/crystallize.rs
similarity index 100%
rename from crates/runtime/ente-brain/src/crystallize.rs
rename to crates/runtime/arje-brain/src/crystallize.rs
diff --git a/crates/runtime/ente-brain/src/dispatch.rs b/crates/runtime/arje-brain/src/dispatch.rs
similarity index 96%
rename from crates/runtime/ente-brain/src/dispatch.rs
rename to crates/runtime/arje-brain/src/dispatch.rs
index f864300..55db72e 100644
--- a/crates/runtime/ente-brain/src/dispatch.rs
+++ b/crates/runtime/arje-brain/src/dispatch.rs
@@ -14,7 +14,7 @@ pub trait ActionSink: Send + Sync {
/// Spawn una Card decodificada. Implementación: GraphEvent::SpawnRequest.
fn spawn(&self, card_blob: &str);
/// Invoke por bus. blob crudo; el sink lo enruta vía bus_mediator.
- fn invoke(&self, target_cap: ente_card::Capability, blob: Vec<u8>);
+ fn invoke(&self, target_cap: arje_card::Capability, blob: Vec<u8>);
/// Notifica a un Ente específico (target_id). Implementación: forward por bus.
fn notify(&self, target_id: ulid::Ulid, message: &str);
/// Inhibe un comportamiento (placeholder; semántica depende del sink).
@@ -28,7 +28,7 @@ impl ActionSink for NullSink {
fn spawn(&self, card_blob: &str) {
info!(blob_len = card_blob.len(), "NullSink::spawn (no-op)");
}
- fn invoke(&self, target_cap: ente_card::Capability, blob: Vec<u8>) {
+ fn invoke(&self, target_cap: arje_card::Capability, blob: Vec<u8>) {
info!(?target_cap, blob_len = blob.len(), "NullSink::invoke (no-op)");
}
fn notify(&self, target_id: ulid::Ulid, message: &str) {
diff --git a/crates/runtime/ente-brain/src/engine.rs b/crates/runtime/arje-brain/src/engine.rs
similarity index 99%
rename from crates/runtime/ente-brain/src/engine.rs
rename to crates/runtime/arje-brain/src/engine.rs
index e70ca0f..c9363ca 100644
--- a/crates/runtime/ente-brain/src/engine.rs
+++ b/crates/runtime/arje-brain/src/engine.rs
@@ -7,7 +7,7 @@
use crate::observer::TimedEvent;
use crate::rules::{EventKind, EventPattern, Rule, Scope};
-use ente_card::Capability;
+use arje_card::Capability;
use std::collections::HashMap;
use std::sync::Arc;
use std::time::Duration;
diff --git a/crates/runtime/ente-brain/src/introspect.rs b/crates/runtime/arje-brain/src/introspect.rs
similarity index 99%
rename from crates/runtime/ente-brain/src/introspect.rs
rename to crates/runtime/arje-brain/src/introspect.rs
index 77972d0..8e4961e 100644
--- a/crates/runtime/ente-brain/src/introspect.rs
+++ b/crates/runtime/arje-brain/src/introspect.rs
@@ -396,7 +396,7 @@ impl IntrospectServer {
reachable.extend(crate::audit::reachable_from_head(head));
}
reachable.extend(extra_roots);
- match ente_cas::gc(&reachable) {
+ match arje_cas::gc(&reachable) {
Ok((deleted, freed_bytes)) => IntrospectResponse::GcResult { deleted, freed_bytes },
Err(e) => IntrospectResponse::Error(format!("gc: {e}")),
}
diff --git a/crates/runtime/ente-brain/src/lib.rs b/crates/runtime/arje-brain/src/lib.rs
similarity index 100%
rename from crates/runtime/ente-brain/src/lib.rs
rename to crates/runtime/arje-brain/src/lib.rs
diff --git a/crates/runtime/ente-brain/src/loader.rs b/crates/runtime/arje-brain/src/loader.rs
similarity index 99%
rename from crates/runtime/ente-brain/src/loader.rs
rename to crates/runtime/arje-brain/src/loader.rs
index 296ebc1..2ca34ad 100644
--- a/crates/runtime/ente-brain/src/loader.rs
+++ b/crates/runtime/arje-brain/src/loader.rs
@@ -9,7 +9,7 @@
//! adicionales aquí cuando duela escribir JSON a mano. Hoy: una sola rama.
use crate::rules::Rule;
-use ente_card::EntityCard;
+use arje_card::EntityCard;
use std::path::Path;
use tracing::info;
diff --git a/crates/runtime/ente-brain/src/metrics.rs b/crates/runtime/arje-brain/src/metrics.rs
similarity index 99%
rename from crates/runtime/ente-brain/src/metrics.rs
rename to crates/runtime/arje-brain/src/metrics.rs
index ad44be2..06b7c79 100644
--- a/crates/runtime/ente-brain/src/metrics.rs
+++ b/crates/runtime/arje-brain/src/metrics.rs
@@ -128,7 +128,7 @@ async fn format_metrics(state: &BrainState) -> String {
out.push_str("# TYPE ente_brain_audit_head_info gauge\n");
out.push_str(&format!(
"ente_brain_audit_head_info{{sha=\"{}\"}} 1\n",
- ente_cas::hex(&sha)
+ arje_cas::hex(&sha)
));
}
diff --git a/crates/runtime/ente-brain/src/observer.rs b/crates/runtime/arje-brain/src/observer.rs
similarity index 100%
rename from crates/runtime/ente-brain/src/observer.rs
rename to crates/runtime/arje-brain/src/observer.rs
diff --git a/crates/runtime/ente-brain/src/rules.rs b/crates/runtime/arje-brain/src/rules.rs
similarity index 99%
rename from crates/runtime/ente-brain/src/rules.rs
rename to crates/runtime/arje-brain/src/rules.rs
index 8c17a27..c78fa2e 100644
--- a/crates/runtime/ente-brain/src/rules.rs
+++ b/crates/runtime/arje-brain/src/rules.rs
@@ -5,7 +5,7 @@
//! acepta Rules construidas a mano sin pasar por validate() — ver
//! `engine::insert`.
-use ente_card::Capability;
+use arje_card::Capability;
use serde::{Deserialize, Serialize};
use ulid::Ulid;
diff --git a/crates/runtime/ente-bus/Cargo.toml b/crates/runtime/arje-bus/Cargo.toml
similarity index 77%
rename from crates/runtime/ente-bus/Cargo.toml
rename to crates/runtime/arje-bus/Cargo.toml
index eac2173..c8a0a5d 100644
--- a/crates/runtime/ente-bus/Cargo.toml
+++ b/crates/runtime/arje-bus/Cargo.toml
@@ -1,12 +1,12 @@
[package]
-name = "ente-bus"
+name = "arje-bus"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
+arje-card = { path = "../../protocol/arje-card" }
serde = { workspace = true }
postcard = { workspace = true }
ulid = { workspace = true }
@@ -15,7 +15,7 @@ anyhow = { workspace = true }
tracing = { workspace = true }
[dev-dependencies]
-ente-echo = { path = "../ente-echo" }
+arje-echo = { path = "../arje-echo" }
[[example]]
name = "busctl"
diff --git a/crates/runtime/ente-bus/examples/busctl.rs b/crates/runtime/arje-bus/examples/busctl.rs
similarity index 95%
rename from crates/runtime/ente-bus/examples/busctl.rs
rename to crates/runtime/arje-bus/examples/busctl.rs
index 0d5b36e..c0bec53 100644
--- a/crates/runtime/ente-bus/examples/busctl.rs
+++ b/crates/runtime/arje-bus/examples/busctl.rs
@@ -7,7 +7,7 @@
//!
//! Si `ENTE_BUS_SOCK` no está en el entorno, cae al path dev por defecto.
-use ente_bus::{BusClient, BusRequest};
+use arje_bus::{BusClient, BusRequest};
use std::env;
#[tokio::main(flavor = "current_thread")]
@@ -36,7 +36,7 @@ async fn main() -> anyhow::Result<()> {
"invoke-echo" => {
let msg = args.get(2).map(|s| s.as_str()).unwrap_or("hola");
BusRequest::Invoke {
- cap: ente_echo::echo_capability(),
+ cap: arje_echo::echo_capability(),
blob: msg.as_bytes().to_vec(),
}
}
diff --git a/crates/runtime/ente-bus/src/lib.rs b/crates/runtime/arje-bus/src/lib.rs
similarity index 95%
rename from crates/runtime/ente-bus/src/lib.rs
rename to crates/runtime/arje-bus/src/lib.rs
index 586df9c..131bae9 100644
--- a/crates/runtime/ente-bus/src/lib.rs
+++ b/crates/runtime/arje-bus/src/lib.rs
@@ -6,7 +6,7 @@
//! Identidad: cada Ente hijo recibe `ENTE_BUS_SOCK` y `ENTE_ID` en su entorno.
//! El cliente lee ambos vía `BusClient::from_env`.
-use ente_card::Capability;
+use arje_card::Capability;
use serde::{Deserialize, Serialize};
use std::path::Path;
use std::str::FromStr;
@@ -23,14 +23,14 @@ pub const MAX_FRAME: usize = 1 << 20; // 1 MiB — protección contra OOM
/// `Capability::Endpoint { interface: POLKIT_DECISION_IFACE, version: 1 }`
/// para arbitrar autorizaciones. Recibe blob:
/// `pid_be | uid_be | action_id_utf8` → responde 1 byte: 1=allow, 0=deny.
-pub const POLKIT_DECISION_IFACE: ente_card::InterfaceId =
- ente_card::InterfaceId([0xb0; 16]);
+pub const POLKIT_DECISION_IFACE: arje_card::InterfaceId =
+ arje_card::InterfaceId([0xb0; 16]);
/// Interface UUID auto-anunciado por compat-polkit. Diferente al de
/// decisión para evitar recursión (polkit-compat invoca DECISION pero
/// no es proveedor de DECISION; se anuncia como SERVICE).
-pub const POLKIT_SERVICE_IFACE: ente_card::InterfaceId =
- ente_card::InterfaceId([0xa4; 16]);
+pub const POLKIT_SERVICE_IFACE: arje_card::InterfaceId =
+ arje_card::InterfaceId([0xa4; 16]);
/// Credenciales del peer extraídas vía SO_PEERCRED al accept del bus.
/// Imposibles de falsear desde el cliente — el kernel las inyecta.
@@ -132,7 +132,7 @@ pub struct BusClient {
/// forwarda. Sync por simplicidad — un handler async se cubre con
/// `tokio::task::block_in_place` o un canal hacia un task externo.
pub trait InvokeHandler {
- fn handle(&mut self, cap: ente_card::Capability, blob: Vec<u8>) -> BusResponse;
+ fn handle(&mut self, cap: arje_card::Capability, blob: Vec<u8>) -> BusResponse;
}
/// Conexión long-lived para Entes que proveen capacidades. A diferencia de
@@ -157,7 +157,7 @@ impl BusServer {
Ok(Self { stream, self_id })
}
- pub async fn announce(&mut self, capabilities: Vec<ente_card::Capability>) -> anyhow::Result<()> {
+ pub async fn announce(&mut self, capabilities: Vec<arje_card::Capability>) -> anyhow::Result<()> {
let req = BusMessage {
from: Some(self.self_id),
seq: 1,
diff --git a/crates/runtime/ente-cas/Cargo.toml b/crates/runtime/arje-cas/Cargo.toml
similarity index 92%
rename from crates/runtime/ente-cas/Cargo.toml
rename to crates/runtime/arje-cas/Cargo.toml
index df0c34c..b310436 100644
--- a/crates/runtime/ente-cas/Cargo.toml
+++ b/crates/runtime/arje-cas/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "ente-cas"
+name = "arje-cas"
version = "0.0.1"
edition.workspace = true
license.workspace = true
diff --git a/crates/runtime/ente-cas/src/lib.rs b/crates/runtime/arje-cas/src/lib.rs
similarity index 100%
rename from crates/runtime/ente-cas/src/lib.rs
rename to crates/runtime/arje-cas/src/lib.rs
diff --git a/crates/runtime/ente-echo/Cargo.toml b/crates/runtime/arje-echo/Cargo.toml
similarity index 68%
rename from crates/runtime/ente-echo/Cargo.toml
rename to crates/runtime/arje-echo/Cargo.toml
index b3ab6e8..c1ef55d 100644
--- a/crates/runtime/ente-echo/Cargo.toml
+++ b/crates/runtime/arje-echo/Cargo.toml
@@ -1,21 +1,21 @@
[package]
-name = "ente-echo"
+name = "arje-echo"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[lib]
-name = "ente_echo"
+name = "arje_echo"
path = "src/lib.rs"
[[bin]]
-name = "ente-echo"
+name = "arje-echo"
path = "src/main.rs"
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
-ente-bus = { path = "../ente-bus" }
+arje-card = { path = "../../protocol/arje-card" }
+arje-bus = { path = "../arje-bus" }
anyhow = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
diff --git a/crates/runtime/ente-echo/src/lib.rs b/crates/runtime/arje-echo/src/lib.rs
similarity index 93%
rename from crates/runtime/ente-echo/src/lib.rs
rename to crates/runtime/arje-echo/src/lib.rs
index 8ebcc32..4de09ed 100644
--- a/crates/runtime/ente-echo/src/lib.rs
+++ b/crates/runtime/arje-echo/src/lib.rs
@@ -1,7 +1,7 @@
//! Constantes públicas del Ente echo. Lib aparte del bin para que `busctl`
//! y otros consumidores puedan importar el InterfaceId sin enlazar el binario.
-use ente_card::{Capability, InterfaceId};
+use arje_card::{Capability, InterfaceId};
/// UUID estable del interface "echo". Genera nuevo por sed si forkeas.
pub const ECHO_IFACE: InterfaceId = InterfaceId([
diff --git a/crates/runtime/ente-echo/src/main.rs b/crates/runtime/arje-echo/src/main.rs
similarity index 87%
rename from crates/runtime/ente-echo/src/main.rs
rename to crates/runtime/arje-echo/src/main.rs
index 8ef07ea..e6e66b3 100644
--- a/crates/runtime/ente-echo/src/main.rs
+++ b/crates/runtime/arje-echo/src/main.rs
@@ -2,9 +2,9 @@
//! responde a invokes echando el blob recibido. Vehículo para validar el
//! forwarding bus → proveedor → bus → originator.
-use ente_bus::{BusResponse, BusServer, InvokeHandler};
-use ente_card::Capability;
-use ente_echo::{echo_capability, ECHO_IFACE, ECHO_VERSION};
+use arje_bus::{BusResponse, BusServer, InvokeHandler};
+use arje_card::Capability;
+use arje_echo::{echo_capability, ECHO_IFACE, ECHO_VERSION};
use tracing::{info, warn};
use tracing_subscriber::EnvFilter;
@@ -31,7 +31,7 @@ impl InvokeHandler for EchoHandler {
#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("ente_echo=info"));
+ .unwrap_or_else(|_| EnvFilter::new("arje_echo=info"));
tracing_subscriber::fmt().with_env_filter(filter).with_target(true).init();
info!("ente-echo arrancando");
diff --git a/crates/runtime/ente-wasm/Cargo.toml b/crates/runtime/arje-wasm/Cargo.toml
similarity index 79%
rename from crates/runtime/ente-wasm/Cargo.toml
rename to crates/runtime/arje-wasm/Cargo.toml
index 4f28b71..57bb1ca 100644
--- a/crates/runtime/ente-wasm/Cargo.toml
+++ b/crates/runtime/arje-wasm/Cargo.toml
@@ -1,12 +1,12 @@
[package]
-name = "ente-wasm"
+name = "arje-wasm"
version = "0.0.1"
edition.workspace = true
license.workspace = true
publish.workspace = true
[dependencies]
-ente-card = { path = "../../protocol/ente-card" }
+arje-card = { path = "../../protocol/arje-card" }
wasmi = { workspace = true }
wat = { workspace = true }
ulid = { workspace = true }
diff --git a/crates/runtime/ente-wasm/src/lib.rs b/crates/runtime/arje-wasm/src/lib.rs
similarity index 99%
rename from crates/runtime/ente-wasm/src/lib.rs
rename to crates/runtime/arje-wasm/src/lib.rs
index 27b5953..4b4461d 100644
--- a/crates/runtime/ente-wasm/src/lib.rs
+++ b/crates/runtime/arje-wasm/src/lib.rs
@@ -11,7 +11,7 @@
//!
//! Más adelante: `ente.bus_call`, `ente.cap_invoke`, etc.
-use ente_card::EntityCard;
+use arje_card::EntityCard;
use std::sync::atomic::{AtomicI32, Ordering};
use std::sync::Arc;
use tracing::{error, info, warn};
diff --git a/docs/PLAN_MACRO.md b/docs/PLAN_MACRO.md
index a8397e1..5b6ff23 100644
--- a/docs/PLAN_MACRO.md
+++ b/docs/PLAN_MACRO.md
@@ -59,7 +59,7 @@
| módulo | rol | LOC aprox proyectada |
|---|---|---|
-| `carmen` | compositor Wayland (smithay + ente-incarnate sandbox + delegación de regiones) | 8,000-12,000 |
+| `carmen` | compositor Wayland (smithay + arje-incarnate sandbox + delegación de regiones) | 8,000-12,000 |
| `akashi` | notes app con ECS + 4 lentes + gravedad semántica + Susurros | 10,000-15,000 |
| `charka` | transpilador COBOL→Rust + runtime determinista + shadow validator | 25,000-50,000 |
| `matilda` | administrador servidores + vhosts + Docker (con Ghost remoto) | 6,000-9,000 |
@@ -97,8 +97,8 @@
│ init/ │ │ runtime/ │ │ compat/ │
└────┬────┘ └────┬─────┘ └──────────┘
│ │
- │ ente-incarnate │ brain-split: rules, cognitive, audit
- │ (+ pivot_root, │ ente-cas, ente-bus, ente-wasm
+ │ arje-incarnate │ brain-split: rules, cognitive, audit
+ │ (+ pivot_root, │ arje-cas, arje-bus, arje-wasm
│ overlayfs) │
│ │
└──────────┬────────┘
@@ -160,7 +160,7 @@ Pre-requisitos antes de meter código nuevo. La mayoría paralelizable.
| #13 | Split brain en brain-rules + brain-cognitive + brain-audit | sandokan, ágora | 3-5 días |
| #14 | Unificar loader en brahman-cards | reduce duplicación | 1-2 días |
| #16 | Promover lifecycle a sandokan-lifecycle | sandokan, matilda, charka-shadow, carmen | 4-7 días |
-| #19 | pivot_root + overlayfs en ente-incarnate | carmen, matilda Ghost, sandokan completo | 4-7 días |
+| #19 | pivot_root + overlayfs en arje-incarnate | carmen, matilda Ghost, sandokan completo | 4-7 días |
| #20 | transport-ssh-multiplex | sandokan::RemoteEngine, matilda | 3-5 días |
Trabajo paralelo posible: 3-4 tracks. Estimación realista: **2 semanas**.
@@ -187,8 +187,8 @@ Módulos de dominio que pueden empezar cuando sus deps de Fase B estén estables
| #27 | dominium | (mayormente independiente) | 3-6K | 3-4 semanas |
| #26 | takiy | dime (instancia ort) | 5-8K | 4-6 semanas |
| #23 | akashi | dime (instancia 384d), separabilidad UI | 10-15K | 6-10 semanas |
-| #21 | matilda | sandokan-lifecycle, ente-incarnate enhanced, transport-ssh | 6-9K | 5-8 semanas |
-| #29 | carmen | ente-incarnate enhanced, sandokan, ente-logind-compat | 8-12K | 8-12 semanas |
+| #21 | matilda | sandokan-lifecycle, arje-incarnate enhanced, transport-ssh | 6-9K | 5-8 semanas |
+| #29 | carmen | arje-incarnate enhanced, sandokan, arje-logind-compat | 8-12K | 8-12 semanas |
| #31 | ágora | CardKind extension, discovery-dht, brain-audit | 6-10K | 5-8 semanas |
Paralelizable hasta 4-6 tracks simultáneos. Estimación realista: **10-12 semanas**.
@@ -312,7 +312,7 @@ Para considerar cada fase "cerrada":
- [ ] `cargo check --workspace` verde tras rename a chasqui
- [ ] brain split: 3 crates separados, brain umbrella opcional, loader unificado
- [ ] sandokan-lifecycle extraído con tests pasando que cubren shuma's lifecycle existente
-- [ ] ente-incarnate con pivot_root + overlayfs + tests (chroot básico)
+- [ ] arje-incarnate con pivot_root + overlayfs + tests (chroot básico)
- [ ] transport-ssh-multiplex con tests sobre russh
**Fase B**:
@@ -325,7 +325,7 @@ Para considerar cada fase "cerrada":
- [ ] takiy: latencia audio <10ms; persistencia ambos formatos
- [ ] akashi: 4 lentes implementadas; Susurros activos; storage sqlite-vss funcional
- [ ] matilda: Inspect/Diff/Apply ciclo cerrado; al menos provider Docker funcional
-- [ ] carmen: arranca compositor; renderea alacritty; sandbox via ente-incarnate
+- [ ] carmen: arranca compositor; renderea alacritty; sandbox via arje-incarnate
- [ ] ágora: emite + verifica + revoca attestations; grafo navegable; integrado con CardKind
**Fase D**:
diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md
index af3870d..ca98ff0 100644
--- a/docs/ROADMAP.md
+++ b/docs/ROADMAP.md
@@ -7,7 +7,7 @@ impacto (lo que desbloquea más trabajo).
- [x] Split core/ → protocol + init + runtime + compat
- [x] Renames: shipote→shuma, nouser→akasha, yahweh→nahual, lapaloma→pineal
-- [x] Fraccionamiento: vista-core, barra-core extraídos
+- [x] Fraccionamiento: revista-core, barra-core extraídos
- [x] SDDs por subdirectorio
- [x] CHANGELOG particionado por proyecto
- [x] `cargo check --workspace` pasa
@@ -44,7 +44,7 @@ montable (editor abriendo paths semánticos).
| Crate | TODOs | Trabajo |
| ---------------------- | ----- | ----------------------------------------- |
-| `ente-brain` | 11 | Rule engine declarativo + observer |
+| `arje-brain` | 11 | Rule engine declarativo + observer |
| `shuma-core` | 14 | Supervisión avanzada (restart + health) |
| `brahman-handshake` | 10 | Trust fase 4 (revocaciones, beyond peer) |
| `cosmobiologia-engine` | 12 | Sistema GR + harmonics (tareas #55-#63) |
@@ -71,9 +71,9 @@ Memorias del proyecto detallan:
| Shim | Métodos pendientes |
| --------------------- | ------------------------------------ |
-| `ente-logind-compat` | `Inhibit`, `Sleep` hooks |
-| `ente-localed-compat` | `SetVariable` |
-| `ente-machined-compat`| `MachineImage` operations |
+| `arje-logind-compat` | `Inhibit`, `Sleep` hooks |
+| `arje-localed-compat` | `SetVariable` |
+| `arje-machined-compat`| `MachineImage` operations |
Permite correr GNOME/KDE end-to-end sin parches.
@@ -94,4 +94,4 @@ solitario; ~3-4 si se paraleliza (hito 1 con hito 6 son disjuntos).
- 0 stubs `<50 LOC` que no sean intencionales.
- `minga-vfs` montable como `mount.minga`.
- Cosmobiología cubriendo: cartas natales, dial GR, harmonics, 3D, rectificación.
-- GNOME Shell arrancable sobre `arje` (Init = `ente-zero`) sin parches.
+- GNOME Shell arrancable sobre `arje` (Init = `arje-zero`) sin parches.
diff --git a/docs/STATUS.md b/docs/STATUS.md
index a08e174..1f69ee4 100644
--- a/docs/STATUS.md
+++ b/docs/STATUS.md
@@ -5,7 +5,7 @@ y `grep` sobre `src/` en cada crate (sin contar `target/` ni docs).
## Resumen ejecutivo
-- **126 crates** activos en el workspace (124 originales + `vista-core` + `barra-core`).
+- **126 crates** activos en el workspace (124 originales + `revista-core` + `barra-core`).
- **~78.000 LOC** de Rust en `crates/`.
- **Build pasa** (`cargo check --workspace`) tras el reorg del 2026-05-19.
- **2 warnings** no bloqueantes (variant unused + eternal-validation).
@@ -33,8 +33,8 @@ Bootea bare metal + QEMU + initramfs. Pendiente: cobertura tests sobre
|---|---|---|---|
| 3,418 | parcial | ~14 | ★★★☆☆ |
-`ente-brain` concentra 11 TODOs (rule engine declarativo + observer
-estadístico). `ente-bus`/`ente-cas`/`ente-wasm` estables.
+`arje-brain` concentra 11 TODOs (rule engine declarativo + observer
+estadístico). `arje-bus`/`arje-cas`/`arje-wasm` estables.
### `compat/` — Cobertura mínima viable
| LOC | Tests | TODOs | Madurez |
@@ -100,19 +100,19 @@ avanzada (restart policies + health checks).
Landing WASM operativa. 4 crates agnósticos + cdylib + scripts de build.
-### `modules/pluma/` — Funcional, pequeño
+### `modules/fana/` — Funcional, pequeño
| LOC | Tests | TODOs | Madurez |
|---|---|---|---|
| 178 | no | 0 | ★★★☆☆ |
Parser + reader web. Pendiente: AST con inline elements (links, emphasis).
-### `modules/vista/` — Refactorizado (2026-05-19)
+### `modules/revista/` — Refactorizado (2026-05-19)
| LOC | Tests | TODOs | Madurez |
|---|---|---|---|
| ~530 (177 core + ~350 web) | core: 5/5 verdes | 0 | ★★★★☆ |
-`vista-core` agnóstico nuevo + `vista-web` ahora thin DOM binding.
+`revista-core` agnóstico nuevo + `revista-web` ahora thin DOM binding.
### `modules/barra/` — Refactorizado (2026-05-19)
| LOC | Tests | TODOs | Madurez |
diff --git a/docs/arje-boot.md b/docs/arje-boot.md
index 3a9edb8..7b19906 100644
--- a/docs/arje-boot.md
+++ b/docs/arje-boot.md
@@ -1,9 +1,9 @@
# Booteando arje — initramfs, QEMU y bare metal
-`arje` es el init absorbido por brahman: `ente-zero` corre como PID 1, lee
+`arje` es el init absorbido por brahman: `arje-zero` corre como PID 1, lee
la **Tarjeta Semilla** (`/ente/seed.card.json`), monta `/proc /sys /dev
/sys/fs/cgroup`, y encarna recursivamente cada Card declarada en
-`genesis` vía `ente-incarnate::Incarnator` (`clone(2)` + namespaces + cgroup v2).
+`genesis` vía `arje-incarnate::Incarnator` (`clone(2)` + namespaces + cgroup v2).
Este documento describe el ciclo completo:
@@ -21,11 +21,11 @@ Este documento describe el ciclo completo:
El initrd es un **CPIO + gzip** (formato `newc`, estándar Linux). Su raíz:
```
-/init wrapper sh, ejecuta /sbin/ente-zero
-/sbin/ente-zero PID 1 (musl-static por default)
-/usr/sbin/ente-echo
-/usr/sbin/ente-policy-provider
-/usr/sbin/ente-*-compat 13 shims D-Bus (logind, hostnamed, …)
+/init wrapper sh, ejecuta /sbin/arje-zero
+/sbin/arje-zero PID 1 (musl-static por default)
+/usr/sbin/arje-echo
+/usr/sbin/arje-policy-provider
+/usr/sbin/arje-*-compat 13 shims D-Bus (logind, hostnamed, …)
/usr/bin/brahman-status CLI: snapshot del broker (sesiones + matches)
/usr/bin/busctl CLI: bus interno (list-entes, announce, …)
/usr/bin/brainctl CLI: cerebro (rules, entropy, crystals)
@@ -36,14 +36,14 @@ El initrd es un **CPIO + gzip** (formato `newc`, estándar Linux). Su raíz:
```
Path canónico de la semilla en **prod**: `/ente/seed.card.json` (ver
-`crates/core/ente-zero/src/seed.rs`). En **dev** (no PID 1):
+`crates/core/arje-zero/src/seed.rs`). En **dev** (no PID 1):
`./seed.card.json` en el cwd, o se sintetiza una mínima.
## 2. Build del initrd
### 2a. Por qué musl-static
-`ente-zero` corre como **PID 1**: si tiene cualquier dependencia dinámica
+`arje-zero` corre como **PID 1**: si tiene cualquier dependencia dinámica
(`libgcc_s.so.1`, `libc.so.6`, `ld-linux-x86-64.so.2`) que no está
presente en el initramfs, el kernel paniquea con
`error while loading shared libraries: libgcc_s.so.1`.
@@ -96,7 +96,7 @@ ARJE_TARGET=x86_64-unknown-linux-gnu scripts/build-arje-initrd.sh
1. Verifica que el target musl esté instalado; si no, da el comando
exacto para instalarlo.
2. `cargo build --release --target x86_64-unknown-linux-musl` para
- `ente-zero` + los 14 shims compat.
+ `arje-zero` + los 14 shims compat.
3. Sanity-check con `file`: aborta si algún binario quedó dinámico.
4. Valida la seed con `seeds/validate.sh` (parse + `Card::validate`).
5. Verifica que `busybox` sea estático (también aborta si es dinámico).
@@ -164,9 +164,9 @@ wget -O /tmp/vmlinuz \
| `loglevel=7` | log del kernel hasta debug |
| `quiet` | silencia banner kernel |
| `RUST_LOG=trace` | (no se interpreta; usar env en `/init`) |
-| `init=/sbin/ente-zero` | salta `/init`, ejecuta directo (no recomendado) |
+| `init=/sbin/arje-zero` | salta `/init`, ejecuta directo (no recomendado) |
-`ente-zero` lee `RUST_LOG` y `BRAHMAN_*` del env. Para setearlas, editar
+`arje-zero` lee `RUST_LOG` y `BRAHMAN_*` del env. Para setearlas, editar
`/init` antes de empaquetar, o agregar `-fw_cfg name=opt/foo,...` a qemu.
### 3d. Smoke test esperado
@@ -174,9 +174,9 @@ wget -O /tmp/vmlinuz \
Con `seeds/arje-prod.card.json`:
```
-ente-zero despierta como PID 1
+arje-zero despierta como PID 1
Tarjeta Semilla cargada y validada path=/ente/seed.card.json
-bus interno escuchando path=/run/ente-bus.sock
+bus interno escuchando path=/run/arje-bus.sock
brahman handshake escuchando (Unix) socket=/run/brahman-init.sock
brahman admin escuchando socket=/run/brahman-admin.sock
instanciando genesis seed=arje.seed.prod count=16
@@ -242,8 +242,8 @@ de implementar como `Capability::SwitchRoot`.
seeds/validate.sh seeds/arje-prod.card.json
```
-El script carga la Card vía `ente_brain::load_card_file()` (que llama a
-`brahman_card::Card::validate()`) y verifica que `ente-zero` la encarne
+El script carga la Card vía `arje_brain::load_card_file()` (que llama a
+`brahman_card::Card::validate()`) y verifica que `arje-zero` la encarne
hasta `instanciando genesis`.
### 5c. Customizar
@@ -294,7 +294,7 @@ Validación clave (`brahman_card::Card::validate`):
### 6a. Tracing
-`ente-zero` usa `tracing-subscriber`. Default: `ente_zero=debug,info`.
+`arje-zero` usa `tracing-subscriber`. Default: `arje_zero=debug,info`.
Override con `RUST_LOG`:
```bash
@@ -309,10 +309,10 @@ los sockets caen al fallback `/tmp/`:
| socket | env override | servicio |
| ---------------------------- | ----------------------- | ----------------------------------------- |
-| `/tmp/ente-bus-*.sock` | `ENTE_BUS_SOCK` | bus interno (Announce/Invoke/ListEntes) |
+| `/tmp/arje-bus-*.sock` | `ENTE_BUS_SOCK` | bus interno (Announce/Invoke/ListEntes) |
| `/tmp/brahman-init.sock` | `BRAHMAN_INIT_SOCKET` | handshake brahman |
| `/tmp/brahman-admin.sock` | `BRAHMAN_ADMIN_SOCKET` | snapshots de sesiones + matches |
-| `/tmp/ente-brain.sock` | `ENTE_BRAIN_SOCK` | introspección del cerebro (rules, observer) |
+| `/tmp/arje-brain.sock` | `ENTE_BRAIN_SOCK` | introspección del cerebro (rules, observer) |
El initrd trae 3 CLI clients precompilados en `/usr/bin/`:
@@ -351,7 +351,7 @@ arje# busctl list-entes
arje# brainctl top 5
spawn 14
-ente_died 0
+arje_died 0
…
```
@@ -365,8 +365,8 @@ arje# socat - UNIX-CONNECT:/tmp/brahman-admin.sock | jq .
### 6c. Snapshot / restore
```
-ente-zero --checkpoint /ente/checkpoint.json # escribe al cerrar
-ente-zero --restore /ente/checkpoint.json # reconstruye al boot
+arje-zero --checkpoint /ente/checkpoint.json # escribe al cerrar
+arje-zero --restore /ente/checkpoint.json # reconstruye al boot
```
Snapshot adjunto del cerebro: `/ente/checkpoint.brain.json`.
@@ -374,7 +374,7 @@ Snapshot adjunto del cerebro: `/ente/checkpoint.brain.json`.
### 6d. Metrics
```
-ente-zero --metrics-addr 127.0.0.1:9911
+arje-zero --metrics-addr 127.0.0.1:9911
```
Endpoint Prometheus desde dentro de la VM. Para exponerlo al host bajo
@@ -382,20 +382,20 @@ QEMU, agregar `-netdev user,hostfwd=tcp::9911-:9911 -device virtio-net,netdev=
### 6e. Modo DEV en host (sin PID 1)
-`ente-zero` detecta si su PID != 1 y entra en **DEV MODE**: no monta
+`arje-zero` detecta si su PID != 1 y entra en **DEV MODE**: no monta
kernel surface, no se vuelve subreaper, sale tras 4 s. Útil para
iterar Cards en el host:
```bash
mkdir /tmp/arje-test && cp seeds/arje-minimal.card.json /tmp/arje-test/seed.card.json
-cd /tmp/arje-test && target/release/ente-zero
+cd /tmp/arje-test && target/release/arje-zero
```
## 7. Troubleshooting
### 7a. `error while loading shared libraries: libgcc_s.so.1` al boot
-**Causa**: el `/sbin/ente-zero` del initrd se compiló contra glibc
+**Causa**: el `/sbin/arje-zero` del initrd se compiló contra glibc
(`x86_64-unknown-linux-gnu`) y depende dinámicamente de `libgcc_s.so.1`,
`libc.so.6`, `ld-linux-x86-64.so.2`. Esas libs no están en el initramfs,
el kernel mata PID 1 → panic.
@@ -411,7 +411,7 @@ scripts/build-arje-initrd.sh # ya usa musl por default
Verificar manualmente que el binario quedó estático:
```bash
-file target/x86_64-unknown-linux-musl/release/ente-zero
+file target/x86_64-unknown-linux-musl/release/arje-zero
# → "ELF 64-bit LSB executable, ..., statically linked, ..."
```
@@ -422,7 +422,7 @@ recomendado.
### 7b. Kernel panic: `Kernel panic - not syncing: Attempted to kill init!`
-**Causa**: `ente-zero` salió con error antes de bind del bus, o `/init`
+**Causa**: `arje-zero` salió con error antes de bind del bus, o `/init`
crashed antes de exec. PID 1 muriendo = panic kernel.
**Fix**: agregar `panic=10` al cmdline (ya está en el script) para
@@ -464,9 +464,9 @@ target-feature=+crt-static"` o aislando el feature problemático.
- [ ] `rustup target add x86_64-unknown-linux-musl` instalado en el host build.
- [ ] `musl-tools` (Debian/Ubuntu) o equivalente disponible.
- [ ] `busybox-static` disponible para vendorear userspace.
-- [ ] `cargo build --release --target x86_64-unknown-linux-musl -p ente-zero`
+- [ ] `cargo build --release --target x86_64-unknown-linux-musl -p arje-zero`
compila sin warnings.
-- [ ] `file target/x86_64-unknown-linux-musl/release/ente-zero` reporta
+- [ ] `file target/x86_64-unknown-linux-musl/release/arje-zero` reporta
"statically linked".
- [ ] `seeds/validate.sh seeds/arje-prod.card.json` → OK.
- [ ] `scripts/build-arje-initrd.sh` produce `out/arje.initrd.cpio.gz`.
diff --git a/docs/arje-replace-systemd.md b/docs/arje-replace-systemd.md
index 0fa22c1..e0b454d 100644
--- a/docs/arje-replace-systemd.md
+++ b/docs/arje-replace-systemd.md
@@ -11,14 +11,14 @@
| `/sbin/init` | NO se toca (sigue siendo systemd). |
| `/lib/systemd/*` | NO se toca. |
| `kernel + initramfs` | reusamos los del host (firmware, módulos, root FS). |
-| `init=` en GRUB | nueva entrada apunta a `/sbin/ente-zero`. |
+| `init=` en GRUB | nueva entrada apunta a `/sbin/arje-zero`. |
| `GRUB_DEFAULT` | NO se cambia. Sigue arrancando systemd por default. |
| `/ente/seed.card.json`| nueva — define qué arranca arje. |
-| `/usr/sbin/ente-*` | binarios musl-static del fractal. |
+| `/usr/sbin/arje-*` | binarios musl-static del fractal. |
Booteo del kernel → initramfs nativo hace su trabajo (mountea root,
carga módulos) → cuando llega el `switch_root`, en lugar de exec
-`/lib/systemd/systemd`, exec `/sbin/ente-zero`. Esto deja firmware y
+`/lib/systemd/systemd`, exec `/sbin/arje-zero`. Esto deja firmware y
udev fuera del scope de arje (todavía).
## 2. Instalación
@@ -31,7 +31,7 @@ $EDITOR seeds/arje-host.card.json
sudo scripts/install-arje-as-init.sh
# 3. (opcional) bootear arje SÓLO en el próximo reboot (no cambia default)
-sudo grub-reboot "arje (init=/sbin/ente-zero) — kernel $(uname -r)"
+sudo grub-reboot "arje (init=/sbin/arje-zero) — kernel $(uname -r)"
sudo reboot
```
@@ -76,16 +76,16 @@ ninguno a tu seed** salvo que sepas que lo usás:
| `gdm.service`, `lightdm.service` | DM gráfico — agregalo SÓLO si querés GUI.|
| `NetworkManager-wait-online.service` | espera red. arje no necesita "esperar". |
| `systemd-timesyncd.service` | reemplaza con cron-like + ntpd one-shot. |
-| `systemd-machined.service` | reemplazado por `ente-machined-compat`. |
-| `systemd-logind.service` | reemplazado por `ente-logind-compat`. |
-| `systemd-resolved.service` | reemplazado por `ente-resolved-compat`. |
-| `systemd-hostnamed.service` | reemplazado por `ente-hostnamed-compat`. |
-| `systemd-timedated.service` | reemplazado por `ente-timedated-compat`. |
-| `systemd-localed.service` | reemplazado por `ente-localed-compat`. |
-| `systemd-journald.service` | reemplazado por `ente-journald-compat`. |
-| `systemd-tmpfiles-*.service` | reemplazado por `ente-tmpfiles-compat`. |
-| `systemd-binfmt.service` | reemplazado por `ente-binfmt-compat`. |
-| `polkitd.service` | reemplazado por `ente-polkit-compat`. |
+| `systemd-machined.service` | reemplazado por `arje-machined-compat`. |
+| `systemd-logind.service` | reemplazado por `arje-logind-compat`. |
+| `systemd-resolved.service` | reemplazado por `arje-resolved-compat`. |
+| `systemd-hostnamed.service` | reemplazado por `arje-hostnamed-compat`. |
+| `systemd-timedated.service` | reemplazado por `arje-timedated-compat`. |
+| `systemd-localed.service` | reemplazado por `arje-localed-compat`. |
+| `systemd-journald.service` | reemplazado por `arje-journald-compat`. |
+| `systemd-tmpfiles-*.service` | reemplazado por `arje-tmpfiles-compat`. |
+| `systemd-binfmt.service` | reemplazado por `arje-binfmt-compat`. |
+| `polkitd.service` | reemplazado por `arje-polkit-compat`. |
Las últimas 12 ya están como Cards en `seeds/arje-host.card.json`. Las
de la mitad de arriba **no** — no las agregues.
@@ -94,11 +94,11 @@ de la mitad de arriba **no** — no las agregues.
| Card label | reemplaza | binario |
| ------------------ | -------------------------- | -------------------------------------------- |
-| `tmpfiles-boot` | `systemd-tmpfiles-setup` | `/usr/sbin/ente-tmpfiles-compat --boot` |
+| `tmpfiles-boot` | `systemd-tmpfiles-setup` | `/usr/sbin/arje-tmpfiles-compat --boot` |
| `mount-fstab` | `local-fs.target` | `/bin/mount -a` (one-shot) |
| `swap-on` | `swap.target` | `/sbin/swapon -a` (one-shot) |
| `dbus-system` | `dbus.service` | `/usr/bin/dbus-daemon --system --nofork` |
-| `compat-*` (×11) | shims D-Bus de systemd | `/usr/sbin/ente-*-compat` |
+| `compat-*` (×11) | shims D-Bus de systemd | `/usr/sbin/arje-*-compat` |
| `network-dhcpcd` | `NetworkManager` / `networkd` | `/usr/sbin/dhcpcd -B` |
| `sshd` | `ssh.service` | `/usr/sbin/sshd -D` |
| `getty-tty1` | `getty@tty1.service` | `/sbin/agetty --noclear tty1 linux` |
@@ -150,7 +150,7 @@ de la mitad de arriba **no** — no las agregues.
| acción | systemd | arje |
| ---------------------------- | ------------------------------------ | ------------------------------------------------------- |
| Ver servicios activos | `systemctl list-units --state=running` | `brahman-status` + `busctl list-entes` |
-| Ver logs | `journalctl -u foo` | `ente-journalctl` (TODO en CLI; por ahora `dmesg`) |
+| Ver logs | `journalctl -u foo` | `arje-journalctl` (TODO en CLI; por ahora `dmesg`) |
| Restart un servicio | `systemctl restart foo` | matar el PID (`brain` lo reanuda por `Supervision`) |
| Habilitar/Deshabilitar | `systemctl enable/disable` | editar `/ente/seed.card.json` + reboot |
| Ver dependencias | `systemctl list-dependencies foo` | `brahman-status` muestra references y flow matches |
@@ -163,7 +163,7 @@ de la mitad de arriba **no** — no las agregues.
- **udev / hotplug**: arje captura uevents (vía `spawn_uevent_stream`),
pero no hay reglas declarativas todavía. Para boot inicial, el
initramfs nativo ya hizo el cold-plug, así que no es bloqueante.
-- **Timers** (cron-like): `ente-timer-compat` existe pero no está en la
+- **Timers** (cron-like): `arje-timer-compat` existe pero no está en la
seed host por default. Agregalo si querés `*.timer` units migradas.
- **Service generators**: no hay equivalente a `systemd-fstab-generator`
ni `systemd-getty-generator`. Tu seed los declara explícitamente.
@@ -198,7 +198,7 @@ default:
sudo grep -E "^\s*menuentry " /boot/grub/grub.cfg | nl
# Ponerlo como default (usa el índice del menú o el title exacto)
-sudo grub-set-default "arje (init=/sbin/ente-zero) — kernel $(uname -r)"
+sudo grub-set-default "arje (init=/sbin/arje-zero) — kernel $(uname -r)"
```
Mantené la entrada systemd como rescue. Si querés acortar la lista de
@@ -211,7 +211,7 @@ Si arje no levanta el primer boot:
1. Volver a GRUB → entrada systemd → bootea normal.
2. `journalctl --boot=-1` (logs del intento previo).
-3. Buscar `ente-zero` o `Tarjeta Semilla`. Si nada → el ejecutable no
+3. Buscar `arje-zero` o `Tarjeta Semilla`. Si nada → el ejecutable no
se lanzó (kernel panic temprano, falta `init=` correcto, etc.).
4. Si arrancó pero falló alguna Card: la próxima vez, antes de reboot:
```bash
diff --git a/docs/changelog/akasha.md b/docs/changelog/chasqui.md
similarity index 99%
rename from docs/changelog/akasha.md
rename to docs/changelog/chasqui.md
index 7a613a2..6b87e87 100644
--- a/docs/changelog/akasha.md
+++ b/docs/changelog/chasqui.md
@@ -1,6 +1,6 @@
-# Changelog — akasha
+# Changelog — chasqui
-Explorador semántico de Mónadas. Renombrado de `nouser` el 2026-05-19.
+Explorador semántico de Mónadas. Renombrado de `nouser` → `akasha` → el 2026-05-19.
### feat(nouser-explorer): integración al stack yahweh themed
Iter 10. `nouser-explorer` (la app paralela a `nakui-explorer`
diff --git a/scripts/rename-chasqui.py b/scripts/rename-chasqui.py
new file mode 100644
index 0000000..8a58255
--- /dev/null
+++ b/scripts/rename-chasqui.py
@@ -0,0 +1,194 @@
+#!/usr/bin/env python3
+"""
+Rename akasha → chasqui (2026-05-19, segunda iteración del día).
+
+El rename de la mañana (nouser → akasha) se revierte parcialmente: el
+explorador de nómadas pasa a chasqui (Inca: mensajero corredor) para
+liberar el nombre `akasha` que queda reservado para el módulo de notas
+`akashi` (planeado, sin código aún).
+
+Reusa el patrón de scripts/reorg.py:
+ 1. git mv directorios
+ 2. package names en Cargo.toml
+ 3. paths relativos en Cargo.toml
+ 4. imports `use akasha_::` en .rs
+ 5. workspace root Cargo.toml
+
+Uso:
+ python3 scripts/rename-chasqui.py --dry-run
+ python3 scripts/rename-chasqui.py
+"""
+
+import os, re, subprocess, sys
+from pathlib import Path
+
+ROOT = Path("/home/sergio/brahman")
+DRY = "--dry-run" in sys.argv
+
+MOVES: dict[str, str] = {
+ "crates/modules/akasha": "crates/modules/chasqui",
+ "crates/apps/akasha-explorer": "crates/apps/chasqui-explorer",
+}
+
+# Sub-crates dentro de modules/akasha/ no se renombran (mantienen card/core/nous/...);
+# solo cambia el directorio padre y los nombres de paquete.
+
+PKG_RENAMES: dict[str, str] = {
+ "akasha-card": "chasqui-card",
+ "akasha-core": "chasqui-core",
+ "akasha-nous": "chasqui-nous",
+ "akasha-nous-mock": "chasqui-nous-mock",
+ "akasha-nous-real": "chasqui-nous-real",
+ "akasha-explorer": "chasqui-explorer",
+ # Binario umbrella (bin name = "akasha" en akasha-core/Cargo.toml)
+ "akasha": "chasqui",
+}
+
+def sh(cmd, check=True):
+ if DRY:
+ print(f" DRY: {' '.join(cmd)}")
+ return None
+ return subprocess.run(cmd, check=check, cwd=str(ROOT))
+
+def git_mv(src: str, dst: str):
+ src_p = ROOT / src
+ dst_p = ROOT / dst
+ if not src_p.exists():
+ print(f" SKIP {src} (no existe)")
+ return
+ if dst_p.exists():
+ print(f" WARN {dst} ya existe — saltando")
+ return
+ dst_p.parent.mkdir(parents=True, exist_ok=True)
+ sh(["git", "mv", src, dst])
+
+def all_cargo_tomls() -> list[Path]:
+ return [p for p in (ROOT / "crates").rglob("Cargo.toml") if "target" not in p.parts]
+
+def all_rs() -> list[Path]:
+ return [p for p in (ROOT / "crates").rglob("*.rs") if "target" not in p.parts]
+
+CURRENT_TO_OLD = {new: old for old, new in MOVES.items()}
+
+def owner_old_for(toml: Path) -> str:
+ cur = str(toml.parent.relative_to(ROOT))
+ # Match cualquier prefix mapeado
+ for new, old in CURRENT_TO_OLD.items():
+ if cur == new or cur.startswith(new + "/"):
+ return cur.replace(new, old, 1)
+ return cur
+
+def resolve_canon(base_dir: str, rel: str) -> str | None:
+ try:
+ return str((ROOT / base_dir / rel).resolve().relative_to(ROOT))
+ except ValueError:
+ return None
+
+def rewrite_paths_in_toml(toml: Path):
+ text = toml.read_text()
+ owner_old = owner_old_for(toml)
+ owner_new = str(toml.parent.relative_to(ROOT))
+
+ def map_target(old_tgt: str) -> str:
+ for old_prefix, new_prefix in MOVES.items():
+ if old_tgt == old_prefix or old_tgt.startswith(old_prefix + "/"):
+ return old_tgt.replace(old_prefix, new_prefix, 1)
+ return old_tgt
+
+ def repl(m: re.Match) -> str:
+ rel_in_file = m.group(1)
+ for base in (owner_old, owner_new):
+ tgt = resolve_canon(base, rel_in_file)
+ if tgt is None:
+ continue
+ new_tgt = map_target(tgt)
+ if (ROOT / new_tgt).exists() or new_tgt != tgt:
+ new_rel = os.path.relpath(str(ROOT / new_tgt), str(ROOT / owner_new))
+ return f'path = "{new_rel}"'
+ return m.group(0)
+
+ new_text = re.sub(r'path\s*=\s*"([^"]+)"', repl, text)
+ if new_text != text:
+ if DRY:
+ print(f" DRY paths: {toml.relative_to(ROOT)}")
+ else:
+ toml.write_text(new_text)
+
+def rewrite_pkg_names_in_toml(toml: Path):
+ text = toml.read_text()
+ orig = text
+ for old, new in sorted(PKG_RENAMES.items(), key=lambda kv: -len(kv[0])):
+ text = re.sub(rf'(\bname\s*=\s*)"{re.escape(old)}"', rf'\1"{new}"', text)
+ text = re.sub(rf'(\bpackage\s*=\s*)"{re.escape(old)}"', rf'\1"{new}"', text)
+ text = re.sub(rf'^([ \t]*){re.escape(old)}(\s*=)', rf'\1{new}\2',
+ text, flags=re.MULTILINE)
+ text = re.sub(rf'"dep:{re.escape(old)}"', f'"dep:{new}"', text)
+ text = re.sub(rf'"{re.escape(old)}/', f'"{new}/', text)
+ text = re.sub(rf'"{re.escape(old)}"', f'"{new}"', text)
+ if text != orig:
+ if DRY:
+ print(f" DRY names: {toml.relative_to(ROOT)}")
+ else:
+ toml.write_text(text)
+
+USE_RENAMES = {k.replace("-", "_"): v.replace("-", "_") for k, v in PKG_RENAMES.items()}
+
+def rewrite_imports_in_rs(rs: Path):
+ text = rs.read_text()
+ orig = text
+ for old, new in USE_RENAMES.items():
+ text = re.sub(rf'(?<![A-Za-z0-9_]){re.escape(old)}(?![A-Za-z0-9_])', new, text)
+ if text != orig:
+ if DRY:
+ print(f" DRY imports: {rs.relative_to(ROOT)}")
+ else:
+ rs.write_text(text)
+
+def rewrite_workspace_toml():
+ p = ROOT / "Cargo.toml"
+ text = p.read_text()
+ orig = text
+ for old, new in MOVES.items():
+ text = text.replace(f'"{old}"', f'"{new}"')
+ text = text.replace(f'"{old}/', f'"{new}/')
+ for old, new in PKG_RENAMES.items():
+ text = re.sub(rf'^([ \t]*){re.escape(old)}(\s*=)', rf'\1{new}\2',
+ text, flags=re.MULTILINE)
+ # Comentario del workspace que dice "akasha" → "chasqui"
+ text = text.replace(
+ "# modules/akasha/ — Explorador semántico de Mónadas (era nouser)",
+ "# modules/chasqui/ — Explorador semántico de nómadas (ex-nouser, ex-akasha)"
+ )
+ if text != orig:
+ if DRY:
+ print(" DRY workspace toml")
+ else:
+ p.write_text(text)
+
+def run():
+ print(f"=== rename-chasqui.py (DRY={DRY}) ===")
+ print(f" {len(MOVES)} moves, {len(PKG_RENAMES)} pkg renames")
+
+ print("\n-- step 1: git mv --")
+ for old, new in MOVES.items():
+ git_mv(old, new)
+
+ print("\n-- step 2: package names --")
+ for toml in all_cargo_tomls():
+ rewrite_pkg_names_in_toml(toml)
+
+ print("\n-- step 3: paths relativos --")
+ for toml in all_cargo_tomls():
+ rewrite_paths_in_toml(toml)
+
+ print("\n-- step 4: imports en .rs --")
+ for rs in all_rs():
+ rewrite_imports_in_rs(rs)
+
+ print("\n-- step 5: workspace Cargo.toml --")
+ rewrite_workspace_toml()
+
+ print("\nOK")
+
+if __name__ == "__main__":
+ run()
diff --git a/scripts/rename-fase-a.py b/scripts/rename-fase-a.py
new file mode 100644
index 0000000..554434b
--- /dev/null
+++ b/scripts/rename-fase-a.py
@@ -0,0 +1,224 @@
+#!/usr/bin/env python3
+"""
+Fase A · rename batch (2026-05-19):
+ - ente-* → arje-* (25 crates: protocol/init/runtime/compat)
+ - vista → revista (vista-core/web → revista-core/web)
+ - pluma → fana (pluma-md → fana-md, pluma-reader-web → fana-md-reader-web)
+
+Reusa el patrón de scripts/reorg.py + rename-chasqui.py.
+
+Uso:
+ python3 scripts/rename-fase-a.py --dry-run
+ python3 scripts/rename-fase-a.py
+"""
+
+import os, re, subprocess, sys
+from pathlib import Path
+
+ROOT = Path("/home/sergio/brahman")
+DRY = "--dry-run" in sys.argv
+
+# ============================================================
+# MOVES — leaf crate dirs, old → new (git_mv crea dirs padre)
+# ============================================================
+MOVES: dict[str, str] = {}
+
+ENTE = {
+ "protocol": ["ente-card"],
+ "init": ["ente-zero", "ente-kernel", "ente-soma",
+ "ente-snapshot", "ente-incarnate"],
+ "runtime": ["ente-bus", "ente-cas", "ente-wasm",
+ "ente-brain", "ente-echo"],
+ "compat": ["ente-logind-compat", "ente-hostnamed-compat",
+ "ente-timedated-compat", "ente-localed-compat",
+ "ente-journald-compat", "ente-resolved-compat",
+ "ente-polkit-compat", "ente-machined-compat",
+ "ente-systemd1-compat", "ente-notify-compat",
+ "ente-timer-compat", "ente-tmpfiles-compat",
+ "ente-binfmt-compat", "ente-policy-provider"],
+}
+for layer, crates in ENTE.items():
+ for c in crates:
+ new = c.replace("ente-", "arje-", 1)
+ MOVES[f"crates/{layer}/{c}"] = f"crates/{layer}/{new}"
+
+# vista → revista
+MOVES["crates/modules/vista/vista-core"] = "crates/modules/revista/revista-core"
+MOVES["crates/modules/vista/vista-web"] = "crates/modules/revista/revista-web"
+# pluma → fana
+MOVES["crates/modules/pluma/pluma-md"] = "crates/modules/fana/fana-md"
+MOVES["crates/modules/pluma/pluma-reader-web"] = "crates/modules/fana/fana-md-reader-web"
+
+# SDD.md de los módulos renombrados
+SDD_MOVES = {
+ "crates/modules/vista/SDD.md": "crates/modules/revista/SDD.md",
+ "crates/modules/pluma/SDD.md": "crates/modules/fana/SDD.md",
+}
+
+# ============================================================
+# PKG_RENAMES — nombres de paquete viejo → nuevo
+# ============================================================
+PKG_RENAMES: dict[str, str] = {}
+for layer, crates in ENTE.items():
+ for c in crates:
+ PKG_RENAMES[c] = c.replace("ente-", "arje-", 1)
+PKG_RENAMES["ente-journalctl"] = "arje-journalctl" # bin name especial
+PKG_RENAMES["vista-core"] = "revista-core"
+PKG_RENAMES["vista-web"] = "revista-web"
+PKG_RENAMES["pluma-md"] = "fana-md"
+PKG_RENAMES["pluma-reader-web"] = "fana-md-reader-web"
+
+# ============================================================
+# Helpers
+# ============================================================
+def sh(cmd, check=True):
+ if DRY:
+ print(f" DRY: {' '.join(cmd)}")
+ return None
+ return subprocess.run(cmd, check=check, cwd=str(ROOT))
+
+def git_mv(src: str, dst: str):
+ src_p, dst_p = ROOT / src, ROOT / dst
+ if not src_p.exists():
+ print(f" SKIP {src} (no existe)")
+ return
+ if dst_p.exists():
+ print(f" WARN {dst} ya existe — saltando")
+ return
+ dst_p.parent.mkdir(parents=True, exist_ok=True)
+ sh(["git", "mv", src, dst])
+
+def all_cargo_tomls():
+ return [p for p in (ROOT / "crates").rglob("Cargo.toml") if "target" not in p.parts]
+
+def all_rs():
+ return [p for p in (ROOT / "crates").rglob("*.rs") if "target" not in p.parts]
+
+CURRENT_TO_OLD = {new: old for old, new in MOVES.items()}
+
+def owner_old_for(toml: Path) -> str:
+ cur = str(toml.parent.relative_to(ROOT))
+ return CURRENT_TO_OLD.get(cur, cur)
+
+def resolve_canon(base_dir: str, rel: str):
+ try:
+ return str((ROOT / base_dir / rel).resolve().relative_to(ROOT))
+ except ValueError:
+ return None
+
+def map_target(old_tgt: str) -> str:
+ return MOVES.get(old_tgt, old_tgt)
+
+def rewrite_paths_in_toml(toml: Path):
+ text = toml.read_text()
+ owner_old = owner_old_for(toml)
+ owner_new = str(toml.parent.relative_to(ROOT))
+
+ def repl(m):
+ rel_in_file = m.group(1)
+ for base in (owner_old, owner_new):
+ tgt = resolve_canon(base, rel_in_file)
+ if tgt is None:
+ continue
+ new_tgt = map_target(tgt)
+ if (ROOT / new_tgt).exists() or new_tgt != tgt:
+ new_rel = os.path.relpath(str(ROOT / new_tgt), str(ROOT / owner_new))
+ return f'path = "{new_rel}"'
+ return m.group(0)
+
+ new_text = re.sub(r'path\s*=\s*"([^"]+)"', repl, text)
+ if new_text != text:
+ if DRY: print(f" DRY paths: {toml.relative_to(ROOT)}")
+ else: toml.write_text(new_text)
+
+def rewrite_pkg_names_in_toml(toml: Path):
+ text = toml.read_text()
+ orig = text
+ for old, new in sorted(PKG_RENAMES.items(), key=lambda kv: -len(kv[0])):
+ old_us, new_us = old.replace("-", "_"), new.replace("-", "_")
+ # name = "old" / "old_us" (package, lib, bin)
+ text = re.sub(rf'(\bname\s*=\s*)"{re.escape(old)}"', rf'\1"{new}"', text)
+ text = re.sub(rf'(\bname\s*=\s*)"{re.escape(old_us)}"', rf'\1"{new_us}"', text)
+ text = re.sub(rf'(\bpackage\s*=\s*)"{re.escape(old)}"', rf'\1"{new}"', text)
+ # dep key al inicio de línea
+ text = re.sub(rf'^([ \t]*){re.escape(old)}(\s*=)', rf'\1{new}\2',
+ text, flags=re.MULTILINE)
+ # features / strings
+ text = re.sub(rf'"dep:{re.escape(old)}"', f'"dep:{new}"', text)
+ text = re.sub(rf'"{re.escape(old)}/', f'"{new}/', text)
+ text = re.sub(rf'"{re.escape(old)}"', f'"{new}"', text)
+ if text != orig:
+ if DRY: print(f" DRY names: {toml.relative_to(ROOT)}")
+ else: toml.write_text(text)
+
+USE_RENAMES = {k.replace("-", "_"): v.replace("-", "_") for k, v in PKG_RENAMES.items()}
+
+def rewrite_imports_in_rs(rs: Path):
+ text = rs.read_text()
+ orig = text
+ for old, new in sorted(USE_RENAMES.items(), key=lambda kv: -len(kv[0])):
+ text = re.sub(rf'(?<![A-Za-z0-9_]){re.escape(old)}(?![A-Za-z0-9_])', new, text)
+ if text != orig:
+ if DRY: print(f" DRY imports: {rs.relative_to(ROOT)}")
+ else: rs.write_text(text)
+
+def rewrite_workspace_toml():
+ p = ROOT / "Cargo.toml"
+ text = p.read_text()
+ orig = text
+ for old, new in MOVES.items():
+ text = text.replace(f'"{old}"', f'"{new}"')
+ for old, new in PKG_RENAMES.items():
+ text = re.sub(rf'^([ \t]*){re.escape(old)}(\s*=)', rf'\1{new}\2',
+ text, flags=re.MULTILINE)
+ # Comentarios de sección
+ text = text.replace("(era yahweh)", "(era yahweh)") # no-op, placeholder
+ text = text.replace("# modules/vista/ — Deck horizontal swipe (Flutter PageView)",
+ "# modules/revista/ — Deck horizontal swipe (Flutter PageView)")
+ text = text.replace("# modules/pluma/ — Markdown agnóstico + visor web",
+ "# modules/fana/ — Writer DAG editor (absorbe pluma)")
+ if text != orig:
+ if DRY: print(" DRY workspace toml")
+ else: p.write_text(text)
+
+def cleanup_empty(rel_dir: str):
+ d = ROOT / rel_dir
+ if d.exists() and d.is_dir() and not any(d.iterdir()):
+ if DRY: print(f" DRY rmdir {rel_dir}")
+ else: d.rmdir()
+
+def run():
+ print(f"=== rename-fase-a.py (DRY={DRY}) ===")
+ print(f" {len(MOVES)} moves, {len(PKG_RENAMES)} pkg renames")
+
+ print("\n-- step 1: git mv crates --")
+ for old, new in MOVES.items():
+ git_mv(old, new)
+
+ print("\n-- step 2: git mv SDDs --")
+ for old, new in SDD_MOVES.items():
+ git_mv(old, new)
+
+ print("\n-- step 3: cleanup dirs vacíos --")
+ cleanup_empty("crates/modules/vista")
+ cleanup_empty("crates/modules/pluma")
+
+ print("\n-- step 4: package names --")
+ for toml in all_cargo_tomls():
+ rewrite_pkg_names_in_toml(toml)
+
+ print("\n-- step 5: paths relativos --")
+ for toml in all_cargo_tomls():
+ rewrite_paths_in_toml(toml)
+
+ print("\n-- step 6: imports .rs --")
+ for rs in all_rs():
+ rewrite_imports_in_rs(rs)
+
+ print("\n-- step 7: workspace Cargo.toml --")
+ rewrite_workspace_toml()
+
+ print("\nOK")
+
+if __name__ == "__main__":
+ run()
diff --git a/vamos.txt b/vamos.txt
new file mode 100644
index 0000000..7f4f6ee
--- /dev/null
+++ b/vamos.txt
@@ -0,0 +1,808 @@
+
+● 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, ...)