7 Commits

Author SHA1 Message Date
egutierrez 4a786911cb docs(flows): DoD obligatorio con user-facing surface + abrir issues 0100-0103 (taxonomia, frontmatter migration, dev_console, work dashboard)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 00:07:04 +02:00
egutierrez 4abc3f97ec chore: auto-commit (8 archivos)
- CMakeLists.txt
- app.md
- data_http.cpp
- data_http.h
- main.cpp
- tabs.cpp
- tabs.h
- appicon.ico

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 16:33:23 +02:00
egutierrez 7c7923ac6a fix(win32): link ws2_32 para sockets (issue 0095)
http_client + ws_client llaman socket(), send(), recv(), WSAStartup, etc.
En MinGW-w64 hay que enlazar ws2_32 explicitamente o el linker falla con
__imp_* undefined references. registry_dashboard ya lo hace igual.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 17:00:59 +02:00
egutierrez 7a38fe9a41 feat: tabs DAG List / Detail / Run Detail via data_table_cpp_viz (issue 0095 step 5)
- tabs.{h,cpp}: 3 paneles que renderizan TableInput con data_table::render() + RowDoubleClick events para drill-down (DAG -> Detail -> Run Detail).
- main.cpp: arranca con auto-fetch DAGs y los 3 tabs visibles por defecto. Panel Main diagnostico apagado.
- CMakeLists.txt: linka empty_state.cpp del registry.
- app.md: uses_functions completo (data_table_cpp_viz + stack TQL + empty_state). Tags: [imgui, dashboard, dag, scheduler, http, websocket].

Funcionalidades:
- DAG List: tabla con Name/Schedule/Last Status/Tags/Valid/File. Status combina last_run (REST) + live_runs (WS). Double-click selecciona DAG.
- DAG Detail: header + Run Now (POST /api/dags/{name}/run) + tabla recent runs. Double-click run abre Run Detail.
- Run Detail: header del run + tabla steps (name/status/exit/duration/started) + CollapsingHeader por step con stdout/stderr.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:57:55 +02:00
egutierrez d01c7157a1 feat: cliente WebSocket + panel Live (issue 0095 step 4)
- ws_client.{h,cpp}: copia de registry_dashboard (RFC 6455 manual sobre TCP, sin TLS).
  Background thread, reconnect con backoff, drain por frame.
- main.cpp: arranca WsClient apuntando a /api/ws/dagruns. Drain por frame.
  Parse JSON snapshot/delta -> upsert g_live_runs por id.
  Panel "Live (WS)" muestra estado conexion, watermarks runs/steps, lista live runs.
- CMakeLists.txt: ws_client.cpp en sources.

Build verificado. Tabs DAG List/Detail/Run Detail con data_table::render() en commits siguientes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:47:18 +02:00
egutierrez 44026d0a70 feat: cliente HTTP REST + main panel demo (issue 0095 step 3)
- http_client.{h,cpp}: TCP plain (copia de registry_dashboard, sin SSL).
- data_http.{h,cpp}: API DAG (list/get/runs/trigger) + parser nlohmann/json.
- vendor/nlohmann/json.hpp: vendored.
- main.cpp: panel "Fetch /api/dags" demo, lista DAGs con schedule.
- CMakeLists.txt: anade http_client.cpp + data_http.cpp.

Build verificado. WS y tabs (data_table::render) en commits siguientes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:44:40 +02:00
egutierrez 334943b7db feat: scaffolding dag_engine_ui (issue 0095 step 2)
ImGui app shell:
- main.cpp con fn::run_app(cfg, render), panel Main placeholder.
- CMakeLists.txt + fn_framework + fn_table_viz opt-in.
- app.md frontmatter base.

Capas HTTP/WS/tabs en commits siguientes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:38:07 +02:00