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

2.4 KiB

id, title, status, priority, created, parent, depends_on
id title status priority created parent depends_on
0035b Renderer oculta hijos de grupos colapsados + dedup de aristas grupo-a-grupo pending high 2026-05-03 0035
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).