feat(minga-explorer): listings de items recientes en cada stat card

Iter 12. Hasta ahora minga-explorer mostraba sólo counts. Ahora
cada stat card muestra un sample de los 5 primeros items: hashes
truncados de nodos AST (con kind), atestaciones (content_hash ←
did_short) y claves MST.

- RepoSnapshot agrega 3 Vec<String/(String,String)> con recent
  items, cap RECENT_LIMIT=5.
- load_snapshot itera los stores con filter_map(Result::ok) +
  take(5). Errores per-item silenciados — dashboard tolerante a
  corrupción puntual.
- short_hash(&str) local: trunca a 12 chars (48 bits).
- stat_card extendido con recent_items: &[String]. Si no vacío,
  agrega "recent (N de TOTAL):" + una linea por item.

Tests: 2 → 4 (sanity defaults + short_hash).

Beneficio: tras `minga ingest`, el explorer muestra los hashes
de los nodos creados sin necesitar queries SQL.

Limitación: los "recent" no son cronológicos (sled ordena lex
por hash). Timeline real requiere timestamp al schema.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-05-10 11:37:31 +00:00
parent 2790b6dc8a
commit 99838b849b
2 changed files with 212 additions and 43 deletions
+44
View File
@@ -6,6 +6,50 @@ ratio/diff ver `git show <sha>`.
## 2026-05-10
### feat(minga-explorer): listings de items recientes en cada stat card
Iter 12. Hasta ahora minga-explorer mostraba sólo counts (3
números). Ahora cada stat card muestra también un sample de los
items dentro: hashes truncados de los 5 primeros nodos AST
(con su `kind`), atestaciones (`content_hash ← did_short`) y
claves MST. Mucho más útil para debugging que el "tengo N items".
Cambios en `minga-explorer`:
- **`RepoSnapshot` extendido** con 3 nuevos `Vec<...>`:
- `recent_nodes: Vec<(String, String)>``(hash_short, kind)`.
- `recent_attestations: Vec<(String, String)>`
`(content_hash_short, did_short)`.
- `recent_mst_keys: Vec<String>``hash_short`.
- Cap de 5 items por sección via `RECENT_LIMIT` const.
- **`load_snapshot` itera los stores** y toma los primeros 5
items via `iter().filter_map(Result::ok).take(RECENT_LIMIT)`.
Errores per-item se silencian (`filter_map`) — el dashboard
muestra lo que pueda; un par de items corruptos no debería
tirar el panel.
- **`short_hash(&str)` helper local**: trunca un hex a sus
primeros 12 chars (48 bits, distintivo dentro de un repo
single-machine).
- **`stat_card` extendido**: nuevo arg `recent_items: &[String]`.
Si no está vacío, agrega un sub-header `"recent (N de TOTAL):"`
+ una linea por item. Cada line es texto pequeño (`px(11)`)
con el color principal del theme — visualmente queda como
monospace listing aunque no use mono font (no hay todavía
en el theme).
Tests: 2 → **4** (+2 sanity de los nuevos defaults + del
`short_hash`).
Beneficio operativo:
- Después de `minga ingest archivo.rs`, el explorer muestra
inmediatamente los hashes de los nodos AST creados, qué `kind`
tienen, y las atestaciones firmadas — sin necesitar `minga
status` o queries SQL.
- "5 de 247" da contexto del crecimiento sin overwhelm de
listing completo.
Limitación documentada: los "recent" no son cronológicos — sled
ordena lexicográfico por hash. Para timeline real, agregar
timestamp al schema (cambio breaking del store, scope futuro).
### feat(minga-explorer): nueva app dashboard del repo Minga sobre stack yahweh
Iter 11. Cierra el último frente identificado: integración del
módulo Minga (VCS semántico P2P) al ecosistema GUI. Antes Minga