feat(brahman-handshake): ListSessions endpoint + cliente + UI broker-explorer
Iter 20. Nuevo flujo end-to-end para observabilidad: cualquier módulo
conectado puede pedir al broker la lista de sesiones activas y mostrar
labels + flows in/out por cada una.
brahman-handshake/messages:
- Frame::ListSessions(ListSessions{session}) → Frame::SessionList(SessionList{entries}).
- SessionEntry: session, label, schema_version, outputs, inputs, conscious.
brahman-handshake/server:
- run_post_handshake pasa SessionRegistry a handle_inbound_frame.
- build_session_list helper proyecta el snapshot bajo lock.
- Validación session_id mismatched → Unauthorized.
brahman-handshake/client:
- Client::list_sessions() async, drena MatchEvents intermedios al
pending_events buffer, mismo patrón que ping().
brahman-sidecar/discovery:
- list_sessions / list_sessions_blocking arman Card observer mínima,
piden, Farewell.
brahman-broker-explorer:
- Poll-tick agrega list_sessions_blocking cuando broker está UP*.
- stat_card "Sesiones activas" con count + items ordenados por Ulid:
label · in:[flows] out:[flows] (wit)?.
Test list_sessions_returns_currently_registered: 3 clientes
conectados, observer pide list, verifica labels + schema_version
+ conscious=false. 24 handshake tests + sidecar + broker-explorer
verde.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,56 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-10
|
||||
|
||||
### feat(brahman-handshake): ListSessions endpoint + cliente + UI broker-explorer
|
||||
Iter 20. Nuevo flujo end-to-end para observabilidad: cualquier
|
||||
módulo conectado puede preguntar al broker la lista de sesiones
|
||||
activas y mostrar labels + flows in/out por cada una.
|
||||
|
||||
`brahman-handshake/messages.rs`:
|
||||
- **`Frame::ListSessions(ListSessions { session })`**: request del
|
||||
cliente (server valida que `session` coincida con la sesión vigente,
|
||||
mismo patrón que Ping/Farewell).
|
||||
- **`Frame::SessionList(SessionList { entries })`**: respuesta.
|
||||
Cada `SessionEntry` lleva: `session`, `label`, `schema_version`,
|
||||
`outputs` (nombres de flow.output), `inputs` (nombres de
|
||||
flow.input), `conscious` (`true` si la Card vino con WIT).
|
||||
|
||||
`brahman-handshake/server.rs`:
|
||||
- `run_post_handshake` ahora pasa `SessionRegistry` a
|
||||
`handle_inbound_frame` (necesario para consultar el snapshot de
|
||||
sesiones en respuesta a `ListSessions`).
|
||||
- Helper `build_session_list(sessions)` que toma el snapshot bajo
|
||||
el lock, lo proyecta a `SessionList`, y suelta el lock antes de
|
||||
escribir el frame al wire.
|
||||
- Validación `session_id` mismatched → `HandshakeError::Unauthorized`.
|
||||
|
||||
`brahman-handshake/client.rs`:
|
||||
- `Client::list_sessions()` async: envía el request, drena
|
||||
`MatchEvent`s intermedios al `pending_events` buffer (mismo patrón
|
||||
que `ping`), retorna el `SessionList`.
|
||||
|
||||
`brahman-sidecar/discovery.rs`:
|
||||
- `pub async fn list_sessions(observer_label)` y
|
||||
`pub fn list_sessions_blocking(observer_label)`: arman una Card
|
||||
observer mínima (sin flow.input/output), conectan, piden la lista,
|
||||
Farewell. Para CLIs y módulos std-thread.
|
||||
|
||||
`brahman-broker-explorer`:
|
||||
- Cada poll-tick (cuando el broker está UP*) ahora también pide
|
||||
`list_sessions_blocking` y guarda el snapshot en `Explorer.sessions`.
|
||||
- Render extiende el body con un `stat_card` "Sesiones activas" que
|
||||
muestra el count + lista ordenada por `session` (Ulid temporal),
|
||||
cada item: `label · in:[flows] out:[flows] (wit?)`.
|
||||
|
||||
Tests:
|
||||
- `list_sessions_returns_currently_registered`: levanta server con
|
||||
broker, conecta 3 clientes (alpha, beta, observer), observer pide
|
||||
`list_sessions`, verifica los 3 labels presentes y que la entry
|
||||
del observer reporte `conscious=false` y el `schema_version`
|
||||
esperado.
|
||||
- Stack: handshake suite (24 tests), sidecar (3+8 unit + integ),
|
||||
broker-explorer (4 tests). Todo verde.
|
||||
|
||||
### feat(yahweh-launcher): F3 — extracción del shell standard de explorers
|
||||
Iter 19. Patrón con 4 consumers idénticos (nakui-explorer,
|
||||
nouser-explorer, minga-explorer, brahman-broker-explorer) declaraban
|
||||
|
||||
Reference in New Issue
Block a user