- .claude/CLAUDE.md - .claude/agents/fn-recopilador/SKILL.md - .claude/rules/INDEX.md - .claude/rules/cpp_apps.md - bash/functions/infra/build_cpp_windows.sh - cpp/CMakeLists.txt - cpp/PATTERNS.md - cpp/framework/app_base.cpp - cpp/framework/app_base.h - dev/issues/README.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
10 KiB
id, title, status, priority, created, related, references
| id | title | status | priority | created | related | references | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0067 | Roadmap de prereqs — issues de osint_graph que odr_console necesita antes/durante MVP | pending | high | 2026-05-09 |
|
|
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_consolearranca 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_runtimefields). 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_consoleproduzca zip self-contained con runtime + collectors vendored.
Fase 2 — MVP odr_console
- 2.1 Issue 0066 (odr_console MVP). Esqueleto + 1 collector
api_hn_topend-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-cliigual 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
odrCLI espejo o unificar bajogxcon 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
-
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.
-
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.
-
Por que browser CDP no bloquea MVP: el collector inicial
api_hn_topes API JSON pura. Browser collectors son fase 3, una vez probado el flujo. Asi MVP llega a Windows en dias, no semanas. -
Por que NO portar enrichers a Go (0034) antes: optimizacion prematura. Python embebido (0033) ya da portabilidad. Go solo si la latencia molesta.
-
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.mdycpp/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
gxyodrse unifican bajo un CLI comun (ver fase 5). - Diseño detallado del pipeline builder DAG de odr (ver issue 0066).