32bb2cbd25
- .claude/commands/autopilot.md - dev/proposals_e2e_checks_0121/altsnap_jitter_test.yaml - dev/proposals_e2e_checks_0121/app_hub_launcher.yaml - dev/proposals_e2e_checks_0121/element_matrix_chat.yaml - dev/proposals_e2e_checks_0121/footprint_geo_stack.yaml - dev/proposals_e2e_checks_0121/metabase_registry.yaml - dev/proposals_e2e_checks_0121/script_navegador.yaml - dev/proposals_e2e_checks_0121/services_monitor.yaml - dev/proposals_e2e_checks_0121/tables_qa.yaml Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
150 lines
8.6 KiB
YAML
150 lines
8.6 KiB
YAML
# Propuesta e2e_checks para apps/tables_qa
|
|
# Generado por fn-recopilador modo design-e2e
|
|
# app_id: tables_qa
|
|
# Issue: 0121a wave 3
|
|
# Fecha: 2026-05-19
|
|
#
|
|
# Diagnostico:
|
|
# lang=cpp, framework=imgui (fn::run_app), domain=tools
|
|
# toolchain: mingw-w64 (cross-compile Windows desde WSL) — mismo toolchain que el resto del ecosistema
|
|
# modulos propios: main.cpp + qa_state + qa_panel + test_suite + perf_tests + 10 tabs (tab_*.cpp)
|
|
# dependencia clave: fn_module_data_table (target CMake opcional — linked si existe)
|
|
# Enlaza via: target_link_libraries(tables_qa PRIVATE fn_module_data_table)
|
|
# Si fn_module_data_table no existe, el build procede sin el modulo (tabs muestran stubs).
|
|
# sin frontend/ — no hay pnpm/vite
|
|
# sin tests/ ni pytest — suite propia en test_suite.cpp (run_test_suite(), 10 checks in-process)
|
|
# sin migrations/ — no usa BD propia
|
|
# sin operations.db — no usa el ciclo reactivo de operations (ops_audit: OMITIDO)
|
|
# sin tag 'service' — no expone HTTP (smoke/health: OMITIDO)
|
|
# appicon.ico: PRESENTE en apps/tables_qa/appicon.ico
|
|
#
|
|
# FLAG --self-test:
|
|
# Parseado en main.cpp (L77-84) pero MARCADO como WIP fase 2 TBD.
|
|
# Retorno actual: siempre exit 0 con mensaje "SKIPPED (fase 2 TBD)".
|
|
# El self-test headless real no esta implementado — requiere init parcial del
|
|
# framework (logger) + imgui_test_engine (fase 2 del issue 0108).
|
|
# Dado que exit 0 es garantizado por el stub, el check se incluye como WARNING:
|
|
# verifica que el binario acepta el flag sin crash y confirma el estado WIP.
|
|
# Se podra ascender a critical cuando la fase 2 este implementada.
|
|
#
|
|
# test_suite.cpp (in-process):
|
|
# run_test_suite() ejecuta 10 smoke tests sobre la API publica de data_table.
|
|
# Tests: TableInput construction, ColumnSpec enums, BadgeRule/ChipRule fields,
|
|
# State default-constructible, TableEvent enums, ColorScale config, Duration
|
|
# thresholds, Button setup, Multi-table input, ColorStop ordering.
|
|
# NO requiere display ni contexto GL — opera solo sobre estructuras C++ en memoria.
|
|
# Sin embargo, se invoca desde el QA panel en runtime (boton "Run Tests"),
|
|
# NO desde argv. Por tanto NO hay un --run-tests CLI flag que pueda usarse
|
|
# como check headless directo. El check tests_binary_link (ver abajo) verifica
|
|
# que el modulo data_table linka sin error como proxy del test suite.
|
|
#
|
|
# BUILD path: cmake --build cpp/build --target tables_qa -j
|
|
# BINARY path: cpp/build/apps/tables_qa/tables_qa (Linux/WSL)
|
|
# o cpp/build/windows/apps/tables_qa/tables_qa.exe (Windows cross)
|
|
# app.md documenta el run command como:
|
|
# ./cpp/build/apps/tables_qa/tables_qa (Linux/WSL nativo)
|
|
# No se detecta referencia a build de Windows en app.md — se usa build nativo WSL.
|
|
#
|
|
# Patron: C++ ImGui app testbed (QA visual, sin modo capture propio, sin HTTP)
|
|
|
|
app_id: tables_qa
|
|
|
|
e2e_checks:
|
|
# Build del target tables_qa en el directorio de build WSL nativo.
|
|
# Enlaza fn_module_data_table (data_table::render, TQL, renderers, etc.) si el
|
|
# target existe. Este check valida: (a) los 10 tabs compilan sin error, (b) la
|
|
# API publica de data_table_cpp es ABI-compatible con las cabeceras usadas en
|
|
# los tabs, (c) ninguna TU del modulo rompe ODR.
|
|
# Es el build gate de data_table v2.0+ para issue 0081 BeginTable migration.
|
|
- id: build
|
|
cmd: "cmake --build /home/lucas/fn_registry/cpp/build --target tables_qa -j"
|
|
timeout_s: 300
|
|
severity: critical
|
|
# Nota: si fn_module_data_table aun no esta buildado, cmake lo buildara como
|
|
# dependencia transitiva antes de tables_qa (order dado por target_link_libraries).
|
|
|
|
# Verifica que el binario existe tras el build.
|
|
# cmake --build puede retornar exit 0 en rebuilds parciales sin producir binario
|
|
# si el target ya esta up-to-date pero el archivo fue borrado manualmente.
|
|
- id: binary_exists
|
|
cmd: "test -f /home/lucas/fn_registry/cpp/build/apps/tables_qa/tables_qa"
|
|
timeout_s: 5
|
|
severity: critical
|
|
|
|
# Prueba el flag --self-test declarado en main.cpp.
|
|
# Estado actual (v0.1.0): stub WIP que imprime "SKIPPED (fase 2 TBD)" y sale exit 0.
|
|
# El check confirma: (a) el binario acepta el flag sin SIGSEGV ni abort,
|
|
# (b) el logger se inicializa correctamente antes del early exit,
|
|
# (c) exit 0 consistente con el contrato del stub.
|
|
# Marcado WARNING porque el test suite real no esta corriendo — cuando fase 2
|
|
# implemente --self-test real con imgui_test_engine, ascender a critical y
|
|
# añadir expect_stdout_contains para verificar resultados concretos.
|
|
- id: self_test_stub
|
|
cmd: "/home/lucas/fn_registry/cpp/build/apps/tables_qa/tables_qa --self-test"
|
|
timeout_s: 15
|
|
expect_exit: 0
|
|
expect_stdout_contains: "SKIPPED"
|
|
severity: warning
|
|
# Cuando fase 2 este lista, cambiar expect_stdout_contains a "pass" o similar
|
|
# y ascender severity a critical.
|
|
|
|
# Verifica que el .ico esta presente junto al fuente.
|
|
# add_imgui_app genera tables_qa_appicon.rc que windres incluye en el .exe
|
|
# (recurso .rsrc). Si appicon.ico falta, el build WSL pasa pero el .exe
|
|
# Windows queda sin icono embebido. Fallo aqui detecta borrado accidental
|
|
# del .ico antes de cross-compile.
|
|
- id: icon_exists
|
|
cmd: "test -f /home/lucas/fn_registry/apps/tables_qa/appicon.ico"
|
|
timeout_s: 5
|
|
severity: warning
|
|
|
|
# Verifica que los 10 tabs estan declarados en tabs.h como funciones render_*.
|
|
# tables_qa crece anadiendo tabs (10 en v0.1.0: basic, renderers, buttons,
|
|
# color_rules, dots, joins, tql, drill, events, compat).
|
|
# Un tab anadido en tab_*.cpp pero no declarado en tabs.h produce linker error
|
|
# solo si main.cpp lo referencia; este check detecta drift entre tabs.h y
|
|
# el conteo esperado sin necesitar build.
|
|
# Cuenta "render_" en tabs.h como proxy del numero de tabs declarados.
|
|
- id: tabs_declared
|
|
cmd: >
|
|
count=$(grep -c 'render_' /home/lucas/fn_registry/apps/tables_qa/tabs.h 2>/dev/null);
|
|
echo "render_ declarations in tabs.h: $count";
|
|
test "$count" -ge 10
|
|
timeout_s: 5
|
|
severity: warning
|
|
# Nota: si se añaden tabs futuros, el umbral -ge 10 es minimo; no necesita
|
|
# actualizarse salvo que se eliminen tabs (lo que requeriria revision manual).
|
|
|
|
# Verifica que CMakeLists.txt lista los 10 tab_*.cpp en add_imgui_app.
|
|
# Un tab_foo.cpp creado pero no añadido al CMakeLists no se compila y sus
|
|
# funciones quedan como undefined symbols (detectado en link, no en compile).
|
|
# Este check estático es mas rapido que el build completo y da feedback antes.
|
|
- id: cmakelists_tab_srcs
|
|
cmd: >
|
|
count=$(grep -c '^ tab_' /home/lucas/fn_registry/apps/tables_qa/CMakeLists.txt 2>/dev/null);
|
|
echo "tab_*.cpp in CMakeLists: $count";
|
|
test "$count" -ge 10
|
|
timeout_s: 5
|
|
severity: warning
|
|
|
|
# Justificacion por check:
|
|
# | check | razon |
|
|
# |---------------------|------------------------------------------------------------------------------------|
|
|
# | build | enlaza fn_module_data_table — gate de API data_table v2+ para issue 0081 |
|
|
# | binary_exists | confirma que cmake produjo binario (no solo exit 0) |
|
|
# | self_test_stub | verifica flag --self-test sin crash; estado WIP documentado; escala a critical |
|
|
# | icon_exists | .ico requerido para windres cross-compile; faltante no rompe build WSL |
|
|
# | tabs_declared | detecta drift entre tabs.h y numero esperado de tabs del QA testbed |
|
|
# | cmakelists_tab_srcs | detecta tab_*.cpp creado pero no registrado en add_imgui_app(...) |
|
|
#
|
|
# checks OMITIDOS y razon:
|
|
# | check | razon de omision |
|
|
# |----------------|------------------------------------------------------------------------------------|
|
|
# | ops_audit | no usa operations.db — no hay bucle reactivo en esta app |
|
|
# | smoke/health | no es service, no expone HTTP — es testbed GUI |
|
|
# | capture_mode | no implementado — "Export golden" en app.md es boton UI, no flag CLI |
|
|
# | | (tab_compat.cpp L: "TBD: requires capture API integration") |
|
|
# | run_test_suite | run_test_suite() es in-process vía botón UI, no accessible via CLI flag |
|
|
# | pytest | sin tests/ dir, sin pytest |
|
|
# | perf_test | perf_tests son in-process (run_perf_test via UI), no CLI invocable headless |
|