feat(nakui-explorer): nuevo binario GPUI — Nakui visible en la interfaz

Cierra "nakui no tiene UI propia" del audit. Nuevo binario standalone
nakui-explorer (paralelo a nouser-explorer) que renderea el event log
de un repo Nakui: timeline scrollable de seeds + morphisms con sus
parametros, breakdown por entity type, polling cada 2s para detectar
nuevos eventos appended sin restart.

Diseno: lee directamente el archivo .jsonl del nakui_core::event_log::
EventLog. Path por env NAKUI_EVENT_LOG, default "nakui.jsonl" en pwd.
Sin discovery via broker brahman porque nakui hoy es CLI/library/demos,
no daemon. Cuando se daemonice, sustituir el lector de archivo por
un sidecar consumer (mismo patron que nouser-explorer).

UI:
- Header: path, count total + breakdown seeds/morphisms, reload time.
- Breakdown line: top 5 buckets por frecuencia (entities + morphisms).
- Timeline: tarjetas color-coded por kind (azul=seed, verde=morphism)
  con #seq, kind, entity/morphism, id corto, preview de data/params,
  schema hash o "(legacy)". Mas-recientes-primero, hasta 200 visibles.
- Error banner si lectura falla; el explorer no crashea, sigue
  intentando cada 2s.

Wire: nuevo crates/apps/nakui-explorer/ agregado al workspace. Deps
minimas: nakui-core, gpui, serde_json, uuid (feature serde). Sin
deps de brahman (Nakui standalone).

Tests: 7 unitarios cubriendo load_log (in-order, missing-file),
breakdown (counts + buckets), preview_value (truncate + intact),
short_uuid + short_hash.

Activacion:
  NAKUI_EVENT_LOG=/tmp/nakui_inv_xxx.jsonl cargo run -p nakui-explorer

Estado del CHANGELOG global tras este commit: cero pendientes
fundamentados activos. Lo unico que queda es minga-vfs (FUSE,
explicitamente diferido) y mejoras nice-to-have (cobertura adicional
per-lenguaje, daemon-izacion de nakui para sidecar discovery).
This commit is contained in:
Sergio
2026-05-09 19:33:50 +00:00
parent 6be50c5b73
commit 5b8f71e0de
5 changed files with 594 additions and 0 deletions
+58
View File
@@ -6,6 +6,64 @@ ratio/diff ver `git show <sha>`.
## 2026-05-09
### feat(nakui-explorer): nuevo binario GPUI — Nakui visible en la interfaz
Cierra "nakui no tiene UI propia" del audit. Nuevo binario standalone
`nakui-explorer` (paralelo a `nouser-explorer`) que renderea el
event log de un repo Nakui: timeline scrollable de seeds + morphisms
con sus parámetros, breakdown por entity type, polling cada 2s para
detectar nuevos eventos appended sin restart del explorer.
Diseño:
- Lee directamente el archivo `.jsonl` del `nakui_core::event_log::EventLog`.
Path por env `NAKUI_EVENT_LOG`, default `nakui.jsonl` en pwd.
- Sin discovery vía broker brahman porque nakui hoy es CLI/library/
demos, no daemon. Cuando se daemonice, sustituir el lector de
archivo por un sidecar consumer (mismo patrón que nouser-explorer
actualmente usa).
UI:
- **Header**: path del log, count total + breakdown seeds/morphisms,
tiempo del último reload en ms.
- **Breakdown line**: top 5 buckets por frecuencia (entities + nombres
de morphisms con prefijo `→`).
- **Timeline**: tarjetas color-coded por kind (azul=seed,
verde=morphism). Cada tarjeta muestra `#seq`, kind, entity/morphism
name, id corto (8 hex), preview del data/params (80 chars), schema
hash corto (8 hex) o `(legacy)` si pre-versioning. Mostradas
más-recientes-primero, hasta 200 visibles (suficiente para
navegación; sin scroll virtualizado por ahora).
- **Error banner**: si la lectura falla (archivo inexistente o
corrupto), banner rojo con el motivo. El explorer NO crashea —
sigue intentando cada 2s.
Wire en workspace:
- Nuevo `crates/apps/nakui-explorer/` agregado a `[workspace] members`.
- Deps mínimas: `nakui-core` (para EventLog + LogEntry), `gpui`,
`serde_json`, `uuid` (con feature serde para parsear los IDs).
- Sin deps de brahman por ahora (Nakui standalone).
Tests: 7 unitarios en `tests` mod del bin:
- `load_log_returns_all_entries_in_order` — cargar un .jsonl
generado a mano, asserta que devuelve 5 entries con seqs 0..4
contiguous.
- `breakdown_counts_seeds_morphisms_and_buckets` — verifica el
conteo (3 seeds + 2 morphisms) y los buckets esperados.
- `load_missing_file_yields_empty_not_error` — archivo inexistente
devuelve `[]` sin error (delegado al contrato de `EventLog::open`).
- `preview_value_truncates_long_strings` y `_keeps_short_strings_intact`.
- `short_uuid_takes_first_8_chars` y `short_hash_takes_first_4_bytes_hex`.
Activación:
```sh
NAKUI_EVENT_LOG=/tmp/nakui_inv_xxx.jsonl cargo run -p nakui-explorer
```
Estado del CHANGELOG global tras este commit: cero pendientes
fundamentados activos. Lo único que queda es `minga-vfs` (FUSE,
explícitamente diferido por el usuario) y mejoras nice-to-have
(cobertura adicional per-lenguaje, daemon-ización de nakui para
sidecar discovery).
### feat(minga-core): α-hashing per-language para Python, TypeScript, JavaScript, Go
Cierra el último pendiente fundamentado del CHANGELOG. Cada lenguaje
soportado por `minga` tiene ahora su propio profile α-equivalente —