fad4006f60
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
163 lines
8.9 KiB
Markdown
163 lines
8.9 KiB
Markdown
---
|
|
id: "55"
|
|
title: "Roadmap de prereqs — issues de osint_graph que odr_console necesita antes/durante MVP"
|
|
status: pendiente
|
|
type: epic
|
|
domain:
|
|
- osint
|
|
scope: cross-stack
|
|
priority: alta
|
|
depends: []
|
|
blocks: []
|
|
related:
|
|
- "53"
|
|
- "54"
|
|
created: 2026-05-09
|
|
updated: 2026-05-17
|
|
tags: []
|
|
---
|
|
|
|
## 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).
|