--- id: 0035e title: Pulido del Group + tests cross-platform status: pending priority: medium created: 2026-05-03 parent: 0035 depends_on: [0035c, 0035d] --- ## Objetivo Cierre de la fase 1: el cuadrado del grupo es visualmente informativo (hereda iconografia del tipo mayoritario), el threshold se lee del manifest si esta declarado, y la suite de tests cubre los caminos nuevos en WSL y Windows. ## Cambios 1. **Iconografia heredada**: al construir el atlas / asignar visuales a un nodo Group, mirar los `type_ref` distintos de sus hijos. Si todos comparten un solo tipo, el cuadrado adopta el color y el icono de ese tipo (manteniendo shape=square para distinguirlo de un nodo individual). Si hay heterogeneidad, se queda con el visual genericamente Group (slate + ti-stack-2). 2. **Threshold desde manifest**: el parser de `enrichers//manifest.yaml` ya lee campos top-level. Anadir soporte para `auto_group_threshold: ` y propagarlo al runtime del enricher (lo ve via env var `_GROUP_THRESHOLD` o argumento adicional, lo que sea menos invasivo). 3. **Tests pytest nuevos**: - `test_group_inherits_visual_from_homogeneous_children`: crear Group con 5 Urls como hijos, verificar que su color/icono resuelve al de Url. - `test_group_falls_back_to_generic_for_heterogeneous`: Group con Url + Email, verificar que se queda con el visual genericamente Group. - `test_manifest_auto_group_threshold_override`: manifest con `auto_group_threshold: 100`, run con 80 resultados no agrupa (asumiendo default global 50, override a 100). - `test_schema_migration_idempotent`: BD sin columna group_id migra correctamente; segunda apertura no rompe. 4. **Validacion cross-platform**: la suite completa pasa en WSL (32 + N nuevos) y en Windows (21 + N nuevos, mas los 11 saltados conocidos). ## Acceptance criteria - Group con 5 Urls homogeneos: cuadrado con color/icono de Url. - Group con Url + Email mezclados: cuadrado slate generico. - Override de threshold via manifest funciona. - Migration idempotente: abrir BD ya migrada no genera warnings. - Tests verdes en ambos OS. ## TBD Branch `issue/0035e-polish-and-tests`, merge `--no-ff` con tests verdes en ambos OS. ## Out of scope - Cascada (decision 6 — fase 2). - Aplicar grouping a `extract_links`, `fetch_webpage`, `extract_text_entities` (fase 2). - Promote/regroup desde tableview (fase 2). - Persistir flag `expanded` por grupo (fase 2).