feat(brahman-net): capa P2P compartida — Fase 0 (extracción del swarm)
Primer paso del plan "el encuentro entre Entes no se restringe a local". El swarm libp2p que vivía dentro de minga-p2p::network (282 LOC) sale a una crate compartida brahman-net para que cualquier protocolo de la familia (handshake brahman remoto en Fase 1, sync minga, futuros) reuse una sola malla TCP+Noise+Yamux+Kad+Identify+Stream. BrahmanNet expone: - new() / with_keypair() para identidad efimera o persistente - API de comandos uniforme: dial, listen, add_dht_peer, find_closest_peers, start_providing, find_providers - Publica peer_id (libp2p) y control (stream::Control) — cada protocolo registra su StreamProtocol sin acoplarse al swarm - Re-exporta Stream y StreamProtocol para evitar dep directa a libp2p minga-p2p::network reduce de 282 LOC a 22: re-export del nuevo BrahmanNet bajo el alias historico LibP2pNode (zero churn en MingaPeer) y la const SYNC_PROTOCOL = "/minga/sync/1.0.0" especifica del sub-protocolo de sync Minga. Aclaracion semantica anclada por el usuario: Arje es el init (PID 1), Brahman es el encuentro entre Entes. El nombre brahman-net refleja que la malla pertenece al encuentro, no al runtime — Minga es un cliente de la malla, no su dueño. Tests: minga-p2p completo verde (58 tests, sin regresion). Behavior identico — solo se movio codigo, ningun cambio funcional.
This commit is contained in:
@@ -6,6 +6,46 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-09
|
||||
|
||||
### feat(brahman-net): capa P2P compartida — Fase 0 (extracción del swarm libp2p)
|
||||
Primer paso del plan "el encuentro entre Entes no se restringe a local".
|
||||
El swarm libp2p que vivía dentro de `minga-p2p::network` (282 LOC) sale
|
||||
a una crate compartida `brahman-net` para que cualquier protocolo de la
|
||||
familia (handshake brahman remoto en Fase 1, sync minga, futuros) reuse
|
||||
una sola malla TCP+Noise+Yamux+Kad+Identify+Stream.
|
||||
|
||||
Diseño:
|
||||
- `BrahmanNet::{new, with_keypair}` arma el swarm con DHT en modo
|
||||
Server, Identify auto-poblando el routing table de Kad, y un
|
||||
`stream::Control` accesible para que cada protocolo registre su
|
||||
`StreamProtocol` y abra/acepte streams sin acoplarse al swarm.
|
||||
- API de comandos uniforme: `dial`, `listen`, `add_dht_peer`,
|
||||
`find_closest_peers`, `start_providing`, `find_providers`.
|
||||
- Pública: `peer_id` (libp2p) + `control` (stream::Control).
|
||||
- Re-exporta `Stream` y `StreamProtocol` para que callers no necesiten
|
||||
importar libp2p directo.
|
||||
|
||||
Migración:
|
||||
- `minga-p2p::network` reduce de 282 LOC a 22: ahora sólo re-exporta
|
||||
`BrahmanNet` bajo el alias histórico `LibP2pNode` (zero churn en
|
||||
`MingaPeer`) y declara la const `SYNC_PROTOCOL = "/minga/sync/1.0.0"`
|
||||
específica del sub-protocolo Minga.
|
||||
- Cualquier consumer que necesite armar un nodo P2P puede importar
|
||||
`brahman_net::BrahmanNet` directo sin pasar por minga.
|
||||
- Deps de `minga-p2p` ganan `brahman-net`; el resto del grafo
|
||||
(libp2p, libp2p-stream, futures, tokio-util) sigue igual porque
|
||||
`MingaPeer` aún los usa para la lógica específica de sync.
|
||||
|
||||
Aclaración semántica anclada por el usuario: **Arje** es el init
|
||||
(PID 1, runtime, ente-zero/kernel/soma); **Brahman** es el encuentro
|
||||
entre Entes (handshake/broker/card/sidecar/ahora también net). El
|
||||
nombre de la crate refleja que la malla pertenece al encuentro, no
|
||||
al runtime — Arje puede usar la malla, Minga usa la malla, cualquier
|
||||
futuro módulo (Nakui remoto, p.ej.) la usa, sin acoplarse a Minga.
|
||||
|
||||
Tests: minga-p2p completo verde (58 tests, sin regresión). Behavior
|
||||
verificado idéntico — sólo se movió código, ningún cambio funcional.
|
||||
Próximo: Fase 1 (handshake brahman sobre libp2p stream).
|
||||
|
||||
### refactor(explorer+card): independencia jerárquica enforced — cliente con los wire types + fallback al default path
|
||||
Cierra el único debt estructural detectado en el audit de
|
||||
independencia: `nouser-explorer` ya no arrastra `nouser-core`
|
||||
|
||||
Reference in New Issue
Block a user