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.5 KiB
2.5 KiB
id, title, status, priority, created, parent, depends_on
| id | title | status | priority | created | parent | depends_on | ||
|---|---|---|---|---|---|---|---|---|
| 0035c | web_search crea Group cuando excede umbral (Twitter/Reddit preview) | pending | high | 2026-05-03 | 0035 |
|
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
- Threshold: leer
auto_group_thresholddel manifest si esta presente; fallback a constante global50(hardcoded por ahora; settings UI viene en fase 2). Paraweb_search/manifest.yamlno declaramos override — usa el default. - Preview K: constante global
10(primeros K resultados quedan sueltos colgando del source conSEARCH_RESULT_OFnormal). - Creacion del grupo en
run.py: silen(results) >= threshold:- Insertar entidad
Groupcontype_ref='Group',name='web_search: <query> (<N>)',metadataque incluyaenricher='web_search',query,count=N,batch_id=<UUID>. - Insertar relacion
SEARCH_RESULT_OFdesde el Group al source. - Insertar los primeros K resultados como Urls sueltos
(comportamiento actual, con
batch_iden metadata). - Insertar los restantes N-K como Urls con
group_id=<id_group>ybatch_id=<UUID>en metadata. Cada uno mantiene su relacion individualSEARCH_RESULT_OFal source (NO al grupo — la procedencia es la relacion real).
- Insertar entidad
- batch_id:
UUID4generado al inicio del run, compartido por todos los nodos creados en esa ejecucion (group + sueltos + hijos del grupo).
Acceptance criteria
web_searchcon un mock que devuelve 5 resultados: NO crea Group. Comportamiento actual.web_searchcon 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_grouptest_web_search_above_threshold_creates_group_and_previewtest_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).