# protocol/ — Contratos canónicos + routing **Propósito.** Núcleo de intercomunicación del fractal: tipos canónicos (`Card`, capabilities, soma), handshake módulo↔Init, broker que empareja flows por tipo, y wire types de red. No corre lógica de dominio. ## Crates | crate | tipo | rol | | ---------------------- | ---- | -------------------------------------------------------- | | `brahman-card` | lib | `Card { soma, payload, flow, permissions, supervision }` | | `brahman-card-wit` | lib | Extracción WIT desde componentes WASM | | `brahman-cards` | lib | Templates Nickel + helpers consumer/producer/broker | | `brahman-handshake` | lib | Init↔módulo: Hello, Ping, ListSessions, ListMatches | | `brahman-broker` | lib | Service locator: flow.input ↔ flow.output por tipo | | `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` | ## Dependencias - Intra: handshake → card + broker; sidecar → card; net → handshake. - Cross: consumido por todos los `modules/*` y `apps/*`. - No depende de `init/` ni de `runtime/` (es la base). ## Invariantes - Serialización: `postcard` length-prefixed sobre Unix SOCK_STREAM, JSON sobre HTTP (gateway). Schemas reproducibles vía Nickel. - Identidad: `peer_id` libp2p + firma Ed25519 anclada al peer. - Sesiones: el handshake mantiene una sesión por módulo encarnado. ## Estado Base estable (6,260 LOC con tests). 19 TODOs concentrados en handshake (trust remoto fase 3) y broker. Ver `docs/changelog/protocol.md`.