Files
graph_explorer/issues/0035c-web-search-creates-groups.md

68 lines
2.5 KiB
Markdown

---
id: 0035c
title: web_search crea Group cuando excede umbral (Twitter/Reddit preview)
status: done
priority: high
created: 2026-05-03
parent: 0035
depends_on: [0035a, 0035b]
---
## Objetivo
Que `web_search` deje de vomitar 100+ Urls sueltos. Cuando el numero
de resultados excede el umbral, crea un nodo `Group` que contiene la
mayoria; los primeros K quedan sueltos como preview directo del
source.
## Cambios
1. **Threshold**: leer `auto_group_threshold` del manifest si esta
presente; fallback a constante global `50` (hardcoded por ahora;
settings UI viene en fase 2). Para `web_search/manifest.yaml` no
declaramos override — usa el default.
2. **Preview K**: constante global `10` (primeros K resultados quedan
sueltos colgando del source con `SEARCH_RESULT_OF` normal).
3. **Creacion del grupo en `run.py`**: si `len(results) >= threshold`:
- Insertar entidad `Group` con `type_ref='Group'`,
`name='web_search: <query> (<N>)'`, `metadata` que incluya
`enricher='web_search'`, `query`, `count=N`, `batch_id=<UUID>`.
- Insertar relacion `SEARCH_RESULT_OF` desde el Group al source.
- Insertar los primeros K resultados como Urls sueltos
(comportamiento actual, con `batch_id` en metadata).
- Insertar los restantes N-K como Urls con `group_id=<id_group>`
y `batch_id=<UUID>` en metadata. Cada uno mantiene su relacion
individual `SEARCH_RESULT_OF` al source (NO al grupo — la
procedencia es la relacion real).
4. **batch_id**: `UUID4` generado al inicio del run, compartido por
todos los nodos creados en esa ejecucion (group + sueltos + hijos
del grupo).
## Acceptance criteria
- `web_search` con un mock que devuelve 5 resultados: NO crea Group.
Comportamiento actual.
- `web_search` con un mock que devuelve 100 resultados: crea 1 Group
+ 10 Urls sueltos + 90 Urls con group_id.
- Todos los nodos creados (group + sueltos + agrupados) comparten
`metadata.batch_id`.
- En el canvas (con 0035b ya en master): aparecen 10 Urls + 1 cuadrado
Group colgando del source. Los 90 Urls dentro del Group estan
ocultos.
- Tests pytest nuevos:
- `test_web_search_below_threshold_no_group`
- `test_web_search_above_threshold_creates_group_and_preview`
- `test_web_search_batch_id_shared_across_outputs`
- Tests existentes siguen verdes.
## TBD
Branch `issue/0035c-web-search-creates-groups`, merge `--no-ff` con
tests verdes.
## Out of scope
- Aplicar a otros enrichers (fase 2).
- Cascada multi-tipo (decision 6, fase 2).
- Regroup/promote desde tableview (fase 2).