--- name: osint-person-lookup id: 0005 status: pending created: 2026-05-16 updated: 2026-05-16 priority: medium risk: medium related_issues: [0098] apps: - navegator_dashboard - odr_console - graph_explorer - agents_and_robots trigger: manual schedule: "" expected_runtime_s: 300 tags: [osint, multi-tab, parallel, graph] --- ## Goal Probar paralelismo (multiples scraping jobs concurrentes) + agregacion a grafo. Demuestra que graph_explorer cierra el circulo visualizando datos extraidos. ## Pre-requisitos - odr_console activa (jobs queue). - Chrome con sesiones activas en LinkedIn / Twitter / GitHub (no automatizar login). - `projects/osint_graph/operations.db` accesible (graph_explorer la lee). - claude CLI para resumen final. ## Flow 1. Input: nombre + apellido (`Juan Perez`). 2. odr_console crea 3 jobs concurrentes: - Job A: navegator recipe `osint_linkedin_search.yaml` con query `{name}`. - Job B: navegator recipe `osint_twitter_search.yaml` con query `{name}`. - Job C: navegator recipe `osint_github_search.yaml` con query `{name}`. 3. Cada job extrae snippets: `{source, url, title, snippet, timestamp}`. 4. Cada snippet -> insert en `projects/osint_graph/operations.db` como entity `Snippet` + relations `mentions(Person, Snippet)`. 5. graph_explorer abre el operations.db -> renderiza red de menciones. 6. `claude -p` resume hallazgos en Markdown: dada lista de snippets, devuelve `{summary, confidence, suggested_next_steps}`. 7. Sink: report `.md` en `projects/osint_graph/reports/-.md`. 8. Matrix bot envia link al report. ## Acceptance - [ ] 3 recipes osint creadas (LinkedIn, Twitter, GitHub). - [ ] odr_console lanza 3 jobs paralelos sin race conditions. - [ ] >= 5 snippets totales en operations.db. - [ ] graph_explorer renderiza grafo con >=1 Person + N Snippets. - [ ] Claude resumen generado y valido (no error). - [ ] Report .md commiteado en repo osint_graph. ## Telemetria esperada - 3 runs en `data_factory.runs` (uno por source). - `operations.db` de osint_graph: entities += N, relations += N. - `function_stats.claude_cli_prompt_py_infra`: calls += 1. ## Notas - Consideracion legal: extracciones publicas (perfiles abiertos). NO bypassear paywalls/captchas. - LinkedIn detecta scraping agresivo -> usar rate-limit por job en navegator. - Caso ambicioso (5 apps + paralelismo + LLM). Reservar como hito.