df9d10cc52
ente-zero (PID 1 del fractal arje) ahora levanta el server de
brahman-handshake junto al ente-bus existente, escuchando en
\$BRAHMAN_INIT_SOCKET (default \$XDG_RUNTIME_DIR/brahman-init.sock).
Es un canal paralelo dedicado a módulos brahman-conscientes que se
presentan con una Card y declaran flujos tipados.
Cambios:
- crates/core/brahman-handshake/src/transport.rs: helper nuevo con
resolución XDG_RUNTIME_DIR → TMPDIR, override por var de entorno
BRAHMAN_INIT_SOCKET. Test unitario para el override.
- crates/core/brahman-handshake/Cargo.toml: example "probe" + dev-dep
anyhow. Probe sirve como herramienta de diagnóstico para conectar
contra cualquier server vivo.
- crates/core/brahman-handshake/examples/probe.rs: cliente mínimo que
hace Hello → Ping → Farewell e imprime el HelloAck recibido.
- crates/core/ente-zero/Cargo.toml: dependencias brahman-handshake
+ brahman-broker.
- crates/core/ente-zero/src/main.rs: en primordial_loop, tras spawn
del ente-bus, crea Arc<Mutex<Broker>> compartido y llama
Server::bind. Si el bind falla (FS no escribible, socket en uso),
loggea y degrada a "modo bus-only" — la doctrina PID 1 no rompe por
subsistemas opcionales (mismo patrón que uevents).
Validación end-to-end manual:
$ BRAHMAN_INIT_SOCKET=/tmp/e2e.sock ./target/debug/ente-zero &
$ BRAHMAN_INIT_SOCKET=/tmp/e2e.sock cargo run --example probe
HelloAck: session=01KR41Q8... server=0.1.0 protocol=0.1.0 init_attached=true
Pong: ts=1778252489714ms
Farewell OK
Tests: 27/27 (broker 11 + card 8 + handshake codec+transport 2 + integ 6).
cargo check --workspace: 0 errores.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
1.2 KiB
Rust
30 lines
1.2 KiB
Rust
//! `brahman-handshake` — protocolo runtime Init↔módulo sobre Unix socket.
|
|
//!
|
|
//! Implementa la versión concreta de `shared_wit/protocol.wit` (handshake +
|
|
//! lifecycle): un servidor que vive en el Init (o un Admin proxy) y clientes
|
|
//! que son los módulos Brahman. Cada conexión arranca con un `Hello` que
|
|
//! lleva una [`brahman_card::Card`]; el servidor valida la Card, deriva el
|
|
//! [`TrustLevel`], emite un `HelloAck` con `session-id` ULID, y a partir de
|
|
//! ahí acepta `Ping`/`Farewell`.
|
|
//!
|
|
//! Wire format: frames length-prefixed (4 bytes LE) con cuerpo
|
|
//! [`postcard`]-codificado. Compacto, rápido y reversible.
|
|
//!
|
|
//! Esto NO es la implementación WIT/WASM (que generaría wit-bindgen). Es la
|
|
//! implementación nativa Rust↔Rust que cubre el caso común antes de que los
|
|
//! módulos WASM consuman el mismo contrato vía ABI generada.
|
|
|
|
#![forbid(unsafe_code)]
|
|
#![warn(rust_2018_idioms)]
|
|
|
|
pub mod codec;
|
|
pub mod messages;
|
|
pub mod server;
|
|
pub mod client;
|
|
pub mod transport;
|
|
|
|
pub use brahman_card::PROTOCOL_VERSION;
|
|
|
|
/// Versión del crate de handshake (independiente de `PROTOCOL_VERSION`).
|
|
pub const HANDSHAKE_VERSION: &str = env!("CARGO_PKG_VERSION");
|