fa0ed98880
Cierra el ultimo pendiente del plan de red: Arje ahora puede arrancar
opcionalmente con BrahmanNet configurado, persistir su identidad
libp2p entre reboots, y participar en la malla brahman como nodo
publico. Sin breaking changes: usuarios actuales (sin env vars) siguen
viendo el comportamiento Unix-only de antes.
Activacion por env vars:
- BRAHMAN_LISTEN_MULTIADDR — si set, activa la red P2P. Ej:
/ip4/0.0.0.0/tcp/4101 (publico), /ip4/127.0.0.1/tcp/0 (loopback).
- BRAHMAN_KEYPAIR_PATH — override del path donde se persiste la
keypair Ed25519. Defaults: PID 1 -> /var/lib/brahman/init-keypair.bin;
dev mode -> $XDG_DATA_HOME/brahman/init-keypair.bin con fallbacks.
- BRAHMAN_BOOTSTRAP_PEERS — multiaddrs coma-separados a dial-ear al
arranque para entrar al DHT.
Comportamiento al activarse:
1. keypair_store::load_or_generate carga keypair de disco o genera y
persiste una nueva (32 bytes raw, 0o600, atomic rename). peer_id
estable across reboots.
2. BrahmanNet::with_keypair arma el swarm con esa identidad.
3. net.listen() resuelve la addr y se loggea.
4. BRAHMAN_BOOTSTRAP_PEERS si set -> dial cada multiaddr.
5. ServerConfig.net = Some(net), activando announce_outputs automatico
en el DHT por cada Card con outputs.
6. Ademas del Unix accept loop, se monta libp2p accept loop sobre el
mismo Server compartido (Arc<Server>). Sesiones locales y remotas
conviven en las mismas tablas.
Refactor del Unix accept loop: antes consumia server via run().await;
ahora usa Arc<Server>::accept_one().await en loop para coexistir con
el libp2p accept loop sin moverse el server.
Degradacion gracil: si la keypair no carga, multiaddr invalido,
listen falla, bootstrap dial revienta -> log + continuamos en
Unix-only. Doctrina PID 1 ("ningun subsistema opcional rompe el
bucle primordial") preservada.
Tests: 4 unit en keypair_store: generate_persist_and_reload_yields_
same_peer_id (la property fundamental), rejects_corrupted_file,
persisted_file_is_owner_only (0o600 verificados), default_path_
honors_env.
Activacion en una linea:
BRAHMAN_LISTEN_MULTIADDR=/ip4/0.0.0.0/tcp/4101 ente-zero
Pendientes: stop_providing en cleanup, allowlist/denylist (PKI),
rotacion de keypair sin perder peer_id.
43 lines
1.3 KiB
TOML
43 lines
1.3 KiB
TOML
[package]
|
|
name = "ente-zero"
|
|
version = "0.0.1"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
publish.workspace = true
|
|
|
|
[[bin]]
|
|
name = "ente-zero"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
# Lib crates del fractal — orden: contratos → infra → encarnación → orquestación
|
|
ente-card = { path = "../ente-card" }
|
|
ente-bus = { path = "../ente-bus" }
|
|
ente-cas = { path = "../ente-cas" }
|
|
ente-kernel = { path = "../ente-kernel" }
|
|
ente-soma = { path = "../ente-soma" }
|
|
ente-wasm = { path = "../ente-wasm" }
|
|
ente-snapshot = { path = "../ente-snapshot" }
|
|
ente-brain = { path = "../ente-brain" }
|
|
ente-echo = { path = "../ente-echo" } # solo para constantes del demo
|
|
|
|
# Brahman protocol — handshake para módulos brahman conscientes
|
|
brahman-handshake = { path = "../brahman-handshake" }
|
|
brahman-broker = { path = "../brahman-broker" }
|
|
brahman-admin = { path = "../brahman-admin" }
|
|
brahman-net = { path = "../../shared/brahman-net" }
|
|
|
|
# Runtime / utilidades de PID 1
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
ulid = { workspace = true }
|
|
tokio = { workspace = true }
|
|
nix = { workspace = true }
|
|
libc = { workspace = true }
|
|
anyhow = { workspace = true }
|
|
tracing = { workspace = true }
|
|
tracing-subscriber = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
tempfile = { workspace = true }
|