--- id: 0067 title: Roadmap de prereqs — issues de osint_graph que odr_console necesita antes/durante MVP status: pending priority: high created: 2026-05-09 related: [0065, 0066] references: [ "projects/osint_graph/apps/graph_explorer/issues/0033-multilang-dispatcher-embedded-python.md", "projects/osint_graph/apps/graph_explorer/issues/0033c-fn-check-vendored.md", "projects/osint_graph/apps/graph_explorer/issues/0033d-indexer-python-runtime-fields.md", "projects/osint_graph/apps/graph_explorer/issues/0033e-compile-skill-orchestration.md", "projects/osint_graph/apps/graph_explorer/issues/0038-browser-launch-cdp-control.md", "projects/osint_graph/apps/graph_explorer/issues/0039-cookie-session-manager.md", "projects/osint_graph/apps/graph_explorer/issues/0040-multi-profile-management.md", "projects/osint_graph/apps/graph_explorer/issues/0029-enrichers-cdp.md", "projects/osint_graph/apps/graph_explorer/issues/0030-deep-enrich-macro.md", "projects/osint_graph/apps/graph_explorer/issues/0021-command-palette.md", "projects/osint_graph/apps/graph_explorer/issues/0034-port-system-enrichers-to-go.md", "projects/osint_graph/apps/graph_explorer/issues/0014-browser-extension.md", "projects/osint_graph/apps/graph_explorer/issues/0012-http-ingest-endpoint.md", "projects/osint_graph/apps/graph_explorer/issues/0017-gx-cli.md" ] --- ## 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 `/local_files/browser_profiles//`, 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).