fc4f0824da
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
2.4 KiB
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 |
|
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
- 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). - Filtro al cargar el grafo (
graph_load_from_operationso wrapper en el app): tras leer entities de la BD, descartar las que tengangroup_id != NULLy cuyo grupo padre no este expandido. Las aristas cuyos extremos esten descartados tambien se omiten. - 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. - 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 congroup_idque 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).