--- id: 0018 title: Transforms automatizadas tipo Maltego con browser headless status: pending priority: low created: 2026-05-01 depends_on: [0012] --- ## Objetivo Dada una entidad seleccionada, ejecutar un script (Playwright/Puppeteer) que enriquece el grafo con datos derivados — equivalente a las "transforms" de Maltego. Es la pieza que diferencia frente a alternativas mas estaticas. ## Ejemplos para banking/OSINT espanol - Persona/empresa -> consulta BORME, registro mercantil, axesor. - Dominio -> whois, DNS records, certificados (crt.sh). - Email -> haveibeenpwned, hunter.io. - Telefono -> truecaller-like. - Empresa -> LinkedIn search publico, opencorporates. ## Alcance - Cada transform es un pipeline del registry con tag `transform` y un contrato fijo: input = `{id, type, metadata}`, output = `{entities, relations}`. - Registro de transforms aplicables por entity_type. - UI: context menu sobre nodo -> "Run transform..." -> lista filtrada por type aplicable -> ejecuta async -> notifica al terminar -> preview antes de commit. - Sandbox: cada transform en proceso aparte, timeout configurable. ## Riesgos y mitigaciones - Los scrapers se rompen cuando los sitios cambian -> mantener una suite de "transform health checks" automaticos (cron ligero) que avisa de fallos antes de que el usuario los descubra en vivo. - Cumplimiento legal y robots.txt -> documentar en cada transform su fuente, politica y ToS. - Rate limiting -> cooldown por host configurable. ## Definicion de hecho - Selecciono un dominio en el grafo, lanzo "whois", aparecen registrant, registrar y nameservers como nodos vinculados con relaciones tipadas. - Un transform que falla loguea el error y no afecta a otros que esten corriendo en paralelo. - La lista de transforms aplicables a una entidad se computa segun su type (no se ofrecen los inaplicables). - Health check cron escribe a `proposals` cuando un transform empieza a fallar repetidamente.