Files
fn_registry/dev/proposals_e2e_checks_0121/tables_qa.yaml
T
egutierrez 7913116a8e chore: auto-commit (129 archivos)
- .claude/agents/fn-analizador/SKILL.md
- .claude/agents/fn-constructor/SKILL.md
- .claude/agents/fn-executor/SKILL.md
- .claude/agents/fn-mejorador/SKILL.md
- .claude/agents/fn-orquestador/SKILL.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/commands/app.md
- .claude/commands/compile.md
- .claude/commands/cpp-app.md
- .claude/commands/create_functions.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-01 22:23:12 +02:00

150 lines
8.5 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/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/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/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/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/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/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 |