feat(brahman-broker-explorer): nueva app probe del broker brahman
Iter 14. Cierra otro frente: visibilidad del broker handshake. La app probe cada 5s vía await_provider_blocking y reporta 4 estados claros (Pending / Down / UpNoProvider / UpWithProvider). crates/apps/brahman-broker-explorer/: - Deps: brahman-handshake + brahman-sidecar + stack yahweh themed. - ProbeState enum con 4 variants. - Polling cx.spawn cada 5s; el probe blocking se ejecuta en cx.background_executor().spawn para no congelar el main thread. - Configuración via env: BRAHMAN_INIT_SOCKET, BRAHMAN_BROKER_PROBE_FLOW (default broker-health), BRAHMAN_BROKER_PROBE_TYPE (default ping). - UI: header probe info + theme switcher; banner permanente Error/Warning/Success según estado; stat card con accent color. - 2 tests sanity. Smoke run verificado: bootstrap OK, panic esperado sin display. Apps GUI themed: 5 (nakui-ui + 3 explorers + ahora broker-explorer). Limitaciones: observer Card se registra/desregistra en cada probe; no muestra lista global de Cards (handshake no expone API). Para timeline real de MatchEvents hace falta mantener el Client vivo entre probes — scope futuro. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,70 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-10
|
||||
|
||||
### feat(brahman-broker-explorer): nueva app probe del broker brahman
|
||||
Iter 14. Cierra otro frente: visibilidad del broker brahman (el
|
||||
broker handshake que matchea Cards consumer/producer). Hasta ahora
|
||||
no había forma de "ver" si el broker estaba up sin invocar otro
|
||||
binario CLI. Ahora hay una app GUI que probe cada 5s y reporta 3
|
||||
estados claros.
|
||||
|
||||
Crate nuevo `crates/apps/brahman-broker-explorer/`:
|
||||
- **Deps**: `brahman-handshake`, `brahman-sidecar` + el stack
|
||||
yahweh themed (theme + 3 widgets). Consume el mismo
|
||||
`await_provider_blocking` que usa `nouser-explorer`.
|
||||
- **`ProbeState` enum** con 4 variants:
|
||||
- `Pending` (estado inicial al boot, antes del primer probe).
|
||||
- `Down { reason }` — connect failed, broker no escucha.
|
||||
- `UpNoProvider { flow }` — broker reachable + sin productor
|
||||
para el flow probado dentro del timeout.
|
||||
- `UpWithProvider { flow, producer_socket }` — broker reachable
|
||||
+ matcheó algo, devuelve el socket del provider.
|
||||
- **Polling loop** en `cx.spawn` cada 5s; el probe (que es
|
||||
bloqueante porque internamente usa tokio runtime) se ejecuta en
|
||||
`cx.background_executor().spawn(...)` para no congelar el main
|
||||
thread del UI.
|
||||
- **Configuración via env**:
|
||||
- `BRAHMAN_INIT_SOCKET` — path del broker (default resuelto por
|
||||
`brahman_handshake::transport`).
|
||||
- `BRAHMAN_BROKER_PROBE_FLOW` — flow del Card observer
|
||||
(default `broker-health`).
|
||||
- `BRAHMAN_BROKER_PROBE_TYPE` — type name (default `ping`).
|
||||
- **UI**: header con probe info + theme switcher; banner permanente
|
||||
(Error/Warning/Success/none según estado) debajo del header;
|
||||
stat card con accent color por estado y descripción.
|
||||
- 2 tests sanity (default state es Pending; constants coherentes:
|
||||
PROBE_TIMEOUT < POLL_INTERVAL >= 2s).
|
||||
|
||||
Smoke run del binario verificado: bootstrap completo OK, panic
|
||||
esperado en open_window por falta de display.
|
||||
|
||||
Beneficio operativo:
|
||||
- Si tenés un broker corriendo en `~/.local/share/brahman/init.sock`,
|
||||
el explorer lo detecta + reporta estado verde con su socket.
|
||||
- Si no hay broker, banner rojo + msg claro indicando el path
|
||||
probado.
|
||||
- Si hay broker pero ningún Card produce el flow probado, banner
|
||||
amber — útil para distinguir "broker down" de "broker up,
|
||||
no productor del tipo X".
|
||||
- Apuntando el flow/type via env, podés monitor productores
|
||||
específicos: ej. `BRAHMAN_BROKER_PROBE_FLOW=monad-list
|
||||
BRAHMAN_BROKER_PROBE_TYPE=json` para ver si nouser está sirviendo.
|
||||
|
||||
Apps GUI integradas al stack themed: **5** (nakui-ui, nakui-explorer,
|
||||
nouser-explorer, minga-explorer, brahman-broker-explorer).
|
||||
|
||||
Limitaciones documentadas:
|
||||
- El observer registra una Card temporal en cada probe (cada 5s).
|
||||
Eso ensucia un poco las estadísticas del broker (Cards
|
||||
registradas/desregistradas). No impacta funcionalidad pero
|
||||
inflama el log si el broker tiene observability habilitada.
|
||||
- No muestra la **lista global** de Cards registradas en el broker
|
||||
— el protocolo handshake actual no expone esa API. Para eso
|
||||
habría que agregar un endpoint `ListSessions` al broker server.
|
||||
- No mantiene un buffer de MatchEvents. Cada probe es independiente.
|
||||
Para timeline de matches, hace falta mantener el Client vivo
|
||||
entre probes — scope futuro.
|
||||
|
||||
### feat(yahweh-theme): persistencia de la preferencia de theme entre runs
|
||||
Iter 13. El theme switcher ya cambiaba el chrome en runtime, pero
|
||||
al cerrar y reabrir la app el theme volvía a Nebula default. Ahora
|
||||
|
||||
Reference in New Issue
Block a user