---
id: 0035e
title: Pulido del Group + tests cross-platform
status: done
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/<id>/manifest.yaml` ya lee campos top-level. Anadir
   soporte para `auto_group_threshold: <int>` 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).
