Files
graph_explorer/issues/0035b-renderer-hides-grouped-children.md
T
egutierrez fc4f0824da feat(0035a): tipo Group + columna group_id en entities
Plumbing para issue 0035 — agrupacion de resultados de enrichers
cuando exceden umbral. Sin cambios visibles para el usuario todavia.

- Migracion idempotente: ALTER TABLE entities ADD COLUMN group_id si
  no existe (detectado via PRAGMA table_info). Se ejecuta al abrir
  el proyecto en switch_to_project y en el bootstrap inicial.
- Tipo Group en examples/types.yaml (template) y en el types.yaml
  del proyecto default activo en Windows.
- shape=square (regla en types_registry.cpp extendida a Group),
  color=#94A3B8, icon=ti-stack-2.
- Fields: name (req), count (int), enricher (string), batch_id (string).

Refs: issues/0035a-group-type-and-schema.md
2026-05-03 14:23:23 +02:00

61 lines
2.4 KiB
Markdown

---
id: 0035b
title: Renderer oculta hijos de grupos colapsados + dedup de aristas grupo-a-grupo
status: pending
priority: high
created: 2026-05-03
parent: 0035
depends_on: [0035a]
---
## Objetivo
El renderer aprende a esconder entidades cuyo `group_id` apunta a un
grupo colapsado, y a deduplicar aristas que cruzan dos grupos
colapsados a una sola linea por par de grupos. Sin este paso, los
grupos creados por enrichers (0035c) seguirian mostrando todos sus
hijos en el canvas.
## Cambios
1. **Estado de expansion en RAM**: `unordered_map<entity_id, bool>` en
AppState (`group_expanded`). Default: vacio (todos los grupos
colapsados al arranque). No persiste entre sesiones (fase 1).
2. **Filtro al cargar el grafo** (`graph_load_from_operations` o
wrapper en el app): tras leer entities de la BD, descartar las que
tengan `group_id != NULL` y cuyo grupo padre no este expandido. Las
aristas cuyos extremos esten descartados tambien se omiten.
3. **Deduplicacion de aristas inter-grupo**: cuando ambos extremos de
una arista caen dentro de grupos colapsados (incluso el mismo),
colapsamos el conjunto a UNA linea por par `(group_a, group_b)`.
Sin peso visual, sin grosor variable. Solo deduplicacion topologica.
4. **Centralizar el filtro**: aplicarlo dentro del loader (no en cada
caller). Hoy el grafo se recarga desde toolbar reload, dirty_counter
de jobs, chat mutations marker, switch project — el filtro debe
funcionar en TODAS estas rutas.
## Acceptance criteria
- Insertando manualmente en BD un `Group` + un Url con `group_id` que
apunte a el, recargar el grafo muestra solo el cuadrado, no el Url.
- Si el Url tiene una arista a un Domain externo, la arista no se
dibuja al Url oculto pero SI se dibuja al cuadrado del grupo.
- Si dos Urls dentro del mismo grupo tienen aristas a un Domain
externo, se dibuja UNA sola arista del grupo al Domain (dedup).
- Con `group_expanded[id] = true` (manualmente seteado a efectos de
test, no hay UI todavia), los hijos vuelven a aparecer y las
aristas se dibujan a su extremo real.
- Tests pytest verdes.
## TBD
Branch `issue/0035b-renderer-hides-grouped-children` en el sub-repo,
merge `--no-ff` a master con tests verdes.
## Out of scope
- UI para expandir/colapsar grupo (drilling se hace via tableview en
0035d, no expandiendo en canvas).
- Layouts internos del grupo expandido (fase 3).
- Agregacion de aristas con peso visual (fase 3).