Files
graph_explorer/issues/0030-deep-enrich-macro.md
egutierrez 9042110ea2 docs(issues): plan enrichers asincronos + recoleccion web (0026-0030)
Cinco issues que componen el plan:
- 0026: sistema de jobs (infra, contrato wire)
- 0027: tipo Webpage + cache de documentos
- 0028: enricher fetch_webpage (MVP end-to-end)
- 0028b: enrichers extract_domain / extract_links / extract_text_entities
- 0029: variantes CDP (Chrome headless, screenshot)
- 0030: macro "Deep enrich" + expand_domain

Tambien anade los issues previos 0012-0025 que estaban untracked.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 18:24:13 +02:00

2.2 KiB

id, title, status, priority, created, depends_on
id title status priority created depends_on
0030 Macro "Deep enrich" + enricher expand_domain pending medium 2026-05-01
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_domainextract_linksextract_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://<domain>/ y http://<domain>/ (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).