Files
fn_registry/dev/issues/0067-odr-osint-prereqs-roadmap.md

8.9 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
id title status type domain scope priority depends blocks related created updated tags
55 Roadmap de prereqs — issues de osint_graph que odr_console necesita antes/durante MVP pendiente epic
osint
cross-stack alta
53
54
2026-05-09 2026-05-17

Objetivo

Documentar el orden de dependencias entre las issues de graph_explorer y los issues 0065 (extract jobs) + 0066 (odr_console MVP) para que ambas apps compartan infra (jobs system, runtime Python embebido, CDP browser, profiles, sessions) sin reescribir codigo. Este issue NO implementa nada — es el meta-plan que ordena en que orden se atacan las dependencias previas.

Contexto

odr_console es la segunda app C++ ImGui que necesita el mismo stack de recoleccion de datos que graph_explorer:

  • Workers concurrentes con subprocess + wire protocol stdin/stderr/stdout (jobs system, issue 0026 ya completado).
  • Python embebido portable (sin WSL) — issue 0033 pendiente.
  • Browser CDP con profiles + cookies — issues 0038/0039/0040 pendientes.
  • Compile skill que empaqueta runtime + vendored deps — issues 0033c/d/e pendientes.

Sin este orden:

  • odr_console arranca con dependencia WSL y se rompe en Windows nativo.
  • Los collectors browser-driven no funcionan hasta tener CDP.
  • Cada app duplicaria infra de jobs/cache/subprocess.

Arquitectura

Capas afectadas

Capa Estado actual Que falta para odr
Registry C++ (cpp/functions/) tiene tokens, app_settings, app_about, logger, panel_menu, etc. en fn_framework añadir jobs_pool, subprocess_worker, job_cache_sha256, worker_manifest_loader (issue 0065)
Registry Python (python/functions/) tiene fetch_webpage, web_search, extract_*, html_to_markdown, normalize_url reusar tal cual; vendor en collectors _vendored/
Runtime Python embebido NO existe (graph_explorer usa WSL) issue 0033 — runtime portable Linux+Windows
CDP browser control NO existe issues 0038/0039/0040 — cdp-cli Go binario + profiles + sessions
Compile skill builds .exe Windows + DLLs + assets issue 0033e — empaqueta runtime + vendored + go binaries

Mapeo issues prereq → componente odr

Issue graph_explorer Componente odr afectado Bloqueo?
0033 (multilang + Python embebido) runtime portable, sin WSL bloquea release Windows
0033c (fn check vendored) audit drift _vendored/ ↔ registry nice-to-have
0033d (indexer python_runtime fields) app.md declara python_runtime bloquea 0033e
0033e (compile skill orquesta) distribuible self-contained bloquea release Windows
0034 (port enrichers a Go) acelera arranque de collectors opcional
0038 (browser launch CDP) collectors browser_capture_dom, browser_login_capture bloquea browser collectors
0039 (cookie session manager) collectors con auth bloquea OSINT-style scraping
0040 (multi-profile management) collectors paralelos por profile bloquea multi-fuente
0029 (enrichers via CDP) template para fetch_webpage_browser collector nice-to-have
0030 (deep enrich macro) patron para pipeline builder DAG referencia, no bloquea
0021 (command palette Ctrl+K) UX del launcher panel nice-to-have
0014 (browser extension) ingest desde browser → odr collectors post-MVP
0012 (HTTP ingest endpoint) endpoint compartido entre apps post-MVP
0017 (gx CLI) odr CLI espejo post-MVP

Tareas

Fase 1 — Bloqueantes para MVP odr (orden estricto)

  • 1.1 Issue 0065 (extract jobs system to registry). Bloquea 0066. Refactor seguro: graph_explorer sigue funcionando.
  • 1.2 Issue 0033d (indexer lee python_runtime fields). Pequeño, sin deps. Habilita 0033e.
  • 1.3 Issue 0033 (multilang dispatcher + Python embebido). Critico para Windows nativo. Sin esto, odr depende de WSL igual que graph_explorer hoy.
  • 1.4 Issue 0033e (compile skill orquesta freeze + vendor + go builds). Permite que /compile odr_console produzca zip self-contained con runtime + collectors vendored.

Fase 2 — MVP odr_console

  • 2.1 Issue 0066 (odr_console MVP). Esqueleto + 1 collector api_hn_top end-to-end. Reusa 0065. NO depende de browser CDP (collector inicial es API JSON pura).
  • 2.2 Verificar build Windows + WSL. Compile skill copia exe + Python runtime + collectors a Desktop/apps/odr_console/.

Fase 3 — Browser-driven collectors

  • 3.1 Issue 0038 (browser launch + CDP control). graph_explorer lo necesita igual. odr lo consume por subprocess cdp-cli igual que graph_explorer.
  • 3.2 Issue 0039 (cookie session manager). Permite collectors con auth.
  • 3.3 Issue 0040 (multi-profile management). Permite N collectors en paralelo con profiles distintos.
  • 3.4 Crear collectors odr basados en CDP: browser_capture_dom, browser_login_capture, browser_scroll_paginated (issue futura).

Fase 4 — Calidad y UX (post-MVP)

  • 4.1 Issue 0033c (fn check vendored). CI gate para drift detection.
  • 4.2 Issue 0034 (port enrichers a Go). Reduce dependencia Python opcional.
  • 4.3 Issue 0029 (enrichers via CDP — fetch_webpage_browser, fetch_screenshot). Templates aplicables como collectors.
  • 4.4 Issue 0021 (command palette Ctrl+K). UX comun a las dos apps; extraer al registry.
  • 4.5 Issue 0030 (deep enrich macro). Patron para pipeline builder DAG en odr.

Fase 5 — Integraciones cross-app (largo plazo)

  • 5.1 Issue 0012 (HTTP ingest endpoint local). Compartido por ambas apps.
  • 5.2 Issue 0017 (gx CLI). Crear odr CLI espejo o unificar bajo gx con subcomando.
  • 5.3 Issue 0014 (browser extension). Ingest desde browser apunta a 0012; ambas apps consumen.

Ejemplo de uso

Roadmap visual del orden:

[1.1 0065 extract jobs]            ──┐
[1.2 0033d indexer fields]         ──┤── prereqs MVP odr
[1.3 0033 multilang + python emb]  ──┤   (sin estos, odr no compila distribuible)
[1.4 0033e compile orquesta]       ──┘
                ↓
[2.1 0066 odr MVP]                 ── MVP funcional con collector API
[2.2 verify Windows+WSL]
                ↓
[3.1 0038 browser CDP]             ──┐
[3.2 0039 cookie manager]          ──┤── browser-driven collectors
[3.3 0040 multi-profile]           ──┤
[3.4 collectors browser]           ──┘
                ↓
[4.x calidad: vendored audit, go ports, command palette, deep enrich]
                ↓
[5.x cross-app: HTTP endpoint, CLI unificado, extension]

Bloqueo critico para "release Windows funcional": 1.1 → 1.2 → 1.3 → 1.4 → 2.1.

Decisiones de diseño

  1. Por que reordenar en lugar de bifurcar: si odr clona jobs.cpp, divergira de graph_explorer en semanas. El registry-first justifica el coste de 0065 antes que 0066.

  2. Por que 0033 es critico antes que MVP: graph_explorer hoy depende de WSL para correr enrichers en Windows. Si odr arranca igual, dos apps con la misma deuda. Mejor pagar 0033 una vez para ambas.

  3. Por que browser CDP no bloquea MVP: el collector inicial api_hn_top es API JSON pura. Browser collectors son fase 3, una vez probado el flujo. Asi MVP llega a Windows en dias, no semanas.

  4. Por que NO portar enrichers a Go (0034) antes: optimizacion prematura. Python embebido (0033) ya da portabilidad. Go solo si la latencia molesta.

  5. Por que command palette no es prereq: UX nice-to-have. MVP launcher con search FTS5 + lista basta. 0021 se extrae al registry cuando ambas apps lo necesiten.

Prerequisitos

  • Issue 0026 (jobs system base) — completado.
  • Issue 0033b (vendor python functions) — completado.
  • cpp/PATTERNS.md y cpp/DESIGN_SYSTEM.md — ya autoritativas.
  • Regla apps_tbd.md — sub-repos Gitea + branch master + TBD activo.

Riesgos

Riesgo Mitigacion
Issue 0033 (Python embebido) es grande, retrasa MVP odr semanas Hacer 0066 con python3 del sistema primero, migrar a embebido al cerrar 0033. Coste: dos releases — Linux/WSL primero, Windows nativo despues.
Refactor 0065 rompe graph_explorer TBD obligatorio en sub-repo de graph_explorer + tests pasando antes de mergear (32 WSL + 21 Win).
Browser CDP (0038) se enreda con perfiles existentes del usuario Issue 0040 establece profiles propios bajo <app>/local_files/browser_profiles/<name>/, no toca los del sistema.
Compile skill (0033e) explota build matrix Linux+Windows+freeze+vendor Trabajo incremental: primero python_runtime: false sigue funcionando como hoy; cuando 0033e este, opt-in.
Drift entre _vendored/ de graph_explorer y collectors de odr 0033c (fn check vendored) gate en CI antes de mergear cambios en python/functions/.

Out of scope

  • Implementar ninguno de los issues referenciados — este meta-plan solo ordena.
  • Decidir si gx y odr se unifican bajo un CLI comun (ver fase 5).
  • Diseño detallado del pipeline builder DAG de odr (ver issue 0066).