750b7abcd5
- .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>
4.1 KiB
4.1 KiB
id, title, status, priority, created, blocked_by
| id | title | status | priority | created | blocked_by | |
|---|---|---|---|---|---|---|
| 0066 | online_data_recopilation — odr_console MVP (lanzador GUI + 5-pasos + 1 collector) | pending | high | 2026-05-09 |
|
Objetivo
App C++ ImGui en projects/online_data_recopilation/apps/odr_console/ que:
- Lanza cualquier funcion/pipeline del registry desde panel GUI con form auto-generado (params_schema).
- Implementa el bucle reactivo de 5 pasos sobre
operations.dbpropia. - Reusa jobs system del registry (issue 0065) para concurrencia.
- Reusa enricher protocol +
cdp-cli+ funciones Pythonfetch_webpage/web_search/etc de osint_graph.
Decisiones tomadas
| Tema | Decision |
|---|---|
| Workers default | 4 |
| operations.db | Una unica por la app |
| DuckDB | Embebido (linkar libduckdb) |
| Collectors lang | Python primero; bash/go en futuras issues |
| Browser | CDP via cdp-cli (issue 0038) |
| Concurrencia | jobs_pool_cpp_core (issue 0065) |
| TBD | Obligatorio (regla apps_tbd) — sub-repo dataforge/odr_console |
Alcance MVP (este issue)
Esqueleto codigo
main.cpp—fn::run_appcon AppConfig + render() + paneles.data_registry.cpp/h— abreregistry.dbRO, exponesearch(query),get_function(id).data_operations.cpp/h— abreoperations.dbRW, CRUD de relations/executions/entities/types_snapshot/assertions/assertion_results.data_duck.cpp/h— abrelocal_files/odr.duckdb,query(sql) -> rows,ingest_parquet(path, table).views_launcher.cpp/h— panel busqueda FTS5 + lista resultados + form params + boton "Run" → encola job.views_jobs.cpp/h— panel jobs queue (pendientes/running/done) + live progress.views_datasets.cpp/h— panel DuckDB query editor + tabla preview.CMakeLists.txt—add_imgui_app(odr_console ...)con SQLite, libduckdb, jobs_pool del registry.
Migrations operations.db
migrations/001_init.sql — schema 5-pasos completo:
CREATE TABLE IF NOT EXISTS relations (...); -- pipelines diseñados
CREATE TABLE IF NOT EXISTS executions (...); -- runs con metricas
CREATE TABLE IF NOT EXISTS entities (...); -- datos recopilados
CREATE TABLE IF NOT EXISTS types_snapshot (...); -- copia schema registry
CREATE TABLE IF NOT EXISTS assertions (...); -- reglas SQL
CREATE TABLE IF NOT EXISTS assertion_results (...); -- resultados eval
Reusar schema de fn_operations/migrations/ adaptado.
Collector MVP: api_hn_top
collectors/api_hn_top/:
manifest.yaml: id, name, description, params (limit), uses_functions (http_get_json_py_*).run.py: lee stdin JSON {ops_db_path, app_dir, registry_root, params}, fetcha HN top stories API, escribe parquet avault/raw/hn_top_<ts>.parquet, insertaentityconmetadata.{path,row_count,checksum,source}, emitePROGRESS:por stderr.
Verificacion end-to-end:
- Lanzar odr_console.
- Buscar "hn_top" en launcher → click Run.
- Job aparece en panel jobs, progress llega a 100.
- Entity en operations.db tabla
entities. - Parquet en
vaults/odr_data/raw/. - Datasets panel lo lista, query SQL devuelve filas.
Out of scope MVP (issues futuras)
- Pipeline builder DAG (
imgui_node_editor). - Assertions panel (eval --react).
- Proposals inbox.
- Browser CDP collectors (
browser_capture_dom,browser_login_capture). - Watchlists / scheduling.
- Rate limiting global.
- Form auto-generador desde
params_schemacomplejo (MVP: solo strings + ints).
Criterios aceptacion
- App compila en WSL + Windows.
app.mdindexado porfn index(aparece enapps).- Repo Gitea creado (
dataforge/odr_console) y branch master sincronizado. - Collector
api_hn_toprecupera 30 stories, parquet escrito, entity creado. - Panel datasets ejecuta
SELECT count(*) FROM hn_top. - Logs ImGui muestran
fn_log::log_infocalls del flujo.
Riesgos
- Build C++ + DuckDB + SQLite + jobs_pool → CMake complejo. Vendoring limpio + apuntes en
cpp/PATTERNS.md. - libduckdb en Windows: probar
duckdb.dlljunto al exe. - Collectors Python embebido (issue 0033 runtime) — MVP puede arrancar con
python3del sistema; embeber despues.