--- id: 0030 title: Macro "Deep enrich" + enricher expand_domain status: pending priority: medium created: 2026-05-01 depends_on: [0028, 0028b] --- ## Objetivo Encadenar varios enrichers con un solo click. Cubre dos flujos: 1. **Deep enrich Webpage**: sobre un nodo Webpage, ejecuta en orden `fetch_webpage` (si no fetched aun) → `extract_domain` → `extract_links` → `extract_text_entities`. Cuatro jobs separados, en cadena. 2. **Expand domain**: sobre un nodo Domain, fetch homepage + 1 nivel de links + extraccion de entidades sobre cada pagina. Util para "dame todo lo que sepas de este dominio en un click". ## Implementacion ### Macro Deep enrich (no es un enricher Python — es UI + orquestacion en C++) - Boton/menu item "Deep enrich" en el context menu del nodo Webpage. - Encolar 4 jobs con dependencias: cada job tiene `depends_on_job_id`. - Worker pool respeta dependencias: si el job tiene depends_on y el predecesor no esta `done`, lo deja en cola. - Anadir columna a tabla `jobs`: `depends_on_job_id TEXT`. ### Enricher `expand_domain` ``` applies_to: [Domain] params: - { name: max_pages, type: int, default: 5 } - { name: deep, type: bool, default: false } # si true, deep enrich cada pagina ``` - run.py: 1. Fetch `https:///` y `http:///` (probando ambos esquemas). 2. Crea Webpage homepage + relacion `HOMEPAGE_OF` desde Domain. 3. Si `deep`, encola un job `extract_text_entities` por pagina via un endpoint local de control (out of scope v1) o emite un campo especial `chained_jobs: [...]` que el worker C++ encola. 4. Decision: v1 solo crea las paginas. La cadena con extract_* se puede hacer manualmente desde la UI o esperar a un sistema de chained jobs decente. ## Definicion de hecho - Click derecho en Webpage → "Deep enrich" → 4 jobs en cadena visibles en panel Jobs. Al terminar el ultimo, el grafo tiene domain + links + persons/orgs/etc. - Click derecho en Domain → "Expand domain" → Webpage homepage aparece conectada al Domain. - Cancelar el job intermedio cancela en cascada los que dependen. ## Out of scope v1 - Cron / repeat schedule de enrichers. - Progress agregado de la cadena (cada job mantiene su progress propio).