feat(brahman-demo): bootstrap script reproducible — broker + producer + consumer + 4 explorers
Iter 22. Cierra el set de hoy: future-me (o cualquier nuevo collab)
levanta el escenario completo con un comando.
crates/apps/brahman-demo/ con 3 binarios:
- brahman-demo-broker: Server::bind standalone con Broker. Reemplaza
a ente-zero para demos (ente-zero es PID 1 con kernel surface,
child subreaper, bus, brain, audit — overkill).
- brahman-demo-producer: Card con flow.output[demo-stream:json].
- brahman-demo-consumer: Card con flow.input[demo-feed:json] —
mismo type → matchea con producer.
Env vars en los 3: BRAHMAN_INIT_SOCKET, BRAHMAN_BROKER_CONTEXT,
BRAHMAN_DEMO_LABEL/FLOW/TYPE, RUST_LOG.
scripts/bootstrap-demo.sh:
- Modes: all (default) / broker / only.
- Cleanup-safe: trap mata todos los PIDs spawneados (SIGTERM grace
+ SIGKILL fallback) y borra el socket.
- Espera al socket antes de spawnear (evita ENOENT en handshake).
- Logs separados por proceso bajo $BRAHMAN_DEMO_LOG_DIR.
Smoke end-to-end (sin DISPLAY): consumer recibe MatchEvent
{ Available, demo-feed ← demo-stream, via: Exact, pinned: false }
automáticamente cuando entra el producer. Match fluye por el push
channel del broker.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,49 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-10
|
||||
|
||||
### feat(brahman-demo): bootstrap script reproducible — broker + producer + consumer + 4 explorers
|
||||
Iter 22. Cierra el set de iteraciones de hoy: cualquier persona (o
|
||||
future-me retomando el repo) puede levantar el escenario completo
|
||||
con un comando.
|
||||
|
||||
Crate nuevo `crates/apps/brahman-demo/` con 3 binarios:
|
||||
- **`brahman-demo-broker`**: standalone `Server::bind` con un Broker
|
||||
configurado, escucha en el socket default. Reemplaza a
|
||||
`ente-zero` para fines de demo (ente-zero pesa kernel surface +
|
||||
child subreaper + bus + brain + audit; el demo no lo necesita).
|
||||
- **`brahman-demo-producer`**: registra una Card con `flow.output[demo-stream:json]`
|
||||
y queda pingueando.
|
||||
- **`brahman-demo-consumer`**: registra una Card con `flow.input[demo-feed:json]`
|
||||
(mismo type → matchea con el producer) y queda escuchando
|
||||
`MatchEvent`s.
|
||||
|
||||
Variables de entorno respetadas en los 3: `BRAHMAN_INIT_SOCKET`,
|
||||
`BRAHMAN_BROKER_CONTEXT` (sólo broker), `BRAHMAN_DEMO_LABEL/FLOW/TYPE`,
|
||||
`RUST_LOG`.
|
||||
|
||||
Script nuevo `scripts/bootstrap-demo.sh`:
|
||||
- Modos: `all` (default — broker + producer + consumer + 4 explorers),
|
||||
`broker` (sin GUIs, sólo backend), `only` (sólo broker, sin
|
||||
producer/consumer ni GUIs).
|
||||
- Cleanup-safe: trap `EXIT INT TERM` mata todos los procesos
|
||||
spawneados (con SIGTERM grace + SIGKILL fallback) y borra el socket.
|
||||
- Espera activa hasta 5s a que el socket aparezca antes de spawnear
|
||||
los siguientes (evita ENOENT en el handshake).
|
||||
- Logs separados por proceso bajo `$BRAHMAN_DEMO_LOG_DIR` (default
|
||||
`/tmp/brahman-demo`). Re-invocaciones limpian los logs viejos.
|
||||
- Re-build automático opcional (comentado por default — asume
|
||||
`cargo build --workspace` ya hecho).
|
||||
|
||||
Smoke verificado end-to-end (sin DISPLAY, sólo backend):
|
||||
- Broker arranca, bind del socket OK.
|
||||
- Consumer conecta, asigna session.
|
||||
- Producer conecta, asigna session.
|
||||
- Consumer recibe `MatchEvent { Available, demo-feed ← demo-stream,
|
||||
via: Exact, pinned: false }` automáticamente — el broker computó
|
||||
el match y lo pusheó por el push channel.
|
||||
|
||||
Stack tests: brahman-demo (0 unit), workspace verde.
|
||||
|
||||
### feat(brahman-handshake): ListMatches endpoint + timeline en broker-explorer
|
||||
Iter 21. Cierra el loop de observabilidad iniciado en iter 20: ahora
|
||||
se ven no sólo las sesiones registradas sino también qué matches
|
||||
|
||||
Reference in New Issue
Block a user