# Propuesta e2e_checks para apps/altsnap_jitter_test
# Generado por fn-recopilador modo design-e2e
# Fecha: 2026-05-19
# Issue: 0121a wave 3
#
# Diagnostico:
#   app_id:      altsnap_jitter_test
#   lang:        cpp
#   framework:   imgui (fn::run_app)
#   domain:      tools
#   entry_point: main.cpp
#   version:     0.1.0
#   tags:        [imgui, test, regression, headless]
#
#   Estructura del directorio:
#     CMakeLists.txt  — usa add_imgui_app(altsnap_jitter_test main.cpp); sin
#                       funciones del registry enlazadas (test puro de framework)
#     main.cpp        — harness 6 fases; #ifdef _WIN32 para p2-p6
#     appicon.ico     — presente
#     .git/           — sub-repo propio
#
#   Toolchain: mingw-w64 (cross-compile Windows desde WSL)
#   Runner Windows: bash/functions/infra/e2e_run_cpp_windows.sh
#     source + e2e_run_cpp_windows <target>  =>  build + deploy Desktop + run .exe
#
#   Fases del binario:
#     p1.sync     (cross-platform) — glfwSetWindowPos 60 frames, aserta max_sync=0px
#     p2.altsnap  (Windows-only)   — WM_ENTERSIZEMOVE + burst SWP + WM_EXITSIZEMOVE
#                                    sobre HWND principal; aserta renders_during=0
#     p3.secondary(Windows-only)   — mismo bracket sobre HWND de viewport flotante
#     p4.minimize (Windows-only)   — iconify+restore; aserta alive(during)=1 +
#                                    renders_iconified>0
#     p5.alt_rmb  (Windows-only)   — SendMessageW WM_RBUTTONDOWN+Alt; aserta
#                                    alt_rmb_resize_count delta=1
#     p6.alt_lmb  (Windows-only)   — SendMessageW WM_LBUTTONDOWN+Alt; aserta
#                                    alt_lmb_move_count delta=1
#
#   Exit del binario: 0 = ALL phases PASS (o SKIP en Linux), !=0 = alguna FAIL
#
#   Tests/: NO tiene directorio de tests separado
#   operations.db: NO usa (pure framework test harness, sin entities/relations)
#     ops_audit: OMITIDO
#   tag 'service': NO — no expone HTTP
#     smoke con health: OMITIDO
#   uses_functions: [] — no linkea funciones del registry
#     drift uses_functions: OMITIDO
#
# Patron de checks:
#   - WSL/Linux:  build (cmake Linux) + binary_exists + run bajo xvfb (p1 solamente)
#   - Windows:    e2e_run_cpp_windows (build mingw + deploy + run nativo, p1-p6)
#   - Los checks Windows se marcan severity: warning porque requieren WSL2 con
#     interop habilitado, mingw-w64 instalado y /mnt/c/Users/lucas/Desktop
#     accesible. En CI Linux puro estos checks se skipean de forma natural
#     (cmd.exe / taskkill.exe no existen).
#   - El check linux_run es severity: critical porque p1 (sync) es cross-platform
#     y debe pasar siempre en WSL.

app_id: altsnap_jitter_test

e2e_checks:

  # Configura el build de Linux si el directorio de build no existe.
  # Requerido antes de build_linux la primera vez (cmake configure-only, rapido).
  # Se salta si cpp/build/linux/build.ninja ya existe (cmake --build no necesita
  # reconfiguracion).
  - id: cmake_configure_linux
    cmd: >
      test -f /home/lucas/fn_registry/cpp/build/linux/build.ninja ||
      cmake -S /home/lucas/fn_registry/cpp
            -B /home/lucas/fn_registry/cpp/build/linux
            -DFN_BUILD_TESTS=OFF
            -DCMAKE_BUILD_TYPE=RelWithDebInfo
    timeout_s: 60
    severity: critical

  # Compila el target para Linux (xvfb). Valida que main.cpp compila sin errores
  # y el linkado con fn_framework (app_base.cpp, GLFW, OpenGL) tiene exito.
  # Este es el check de compilacion base que corre en cualquier entorno.
  - id: build_linux
    cmd: "cmake --build /home/lucas/fn_registry/cpp/build/linux --target altsnap_jitter_test -j4"
    timeout_s: 300
    severity: critical

  # Verifica que el binario Linux existe tras el build.
  - id: binary_exists_linux
    cmd: "test -f /home/lucas/fn_registry/cpp/build/linux/apps/altsnap_jitter_test/altsnap_jitter_test"
    timeout_s: 5
    severity: critical

  # Ejecuta el harness bajo xvfb (p1.sync solamente; p2-p6 se autoskipean en Linux).
  # Valida que la capa de sincronizacion GLFW pos callback no tiene regresiones.
  # Usa llvmpipe (soft-render) para no depender de GPU real en CI.
  # Exit 0 = p1 PASS. Cualquier otro exit = bad_sync > 0 o crash.
  - id: linux_run
    cmd: >
      xvfb-run -a -s "-screen 0 1280x800x24"
      env LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe
      /home/lucas/fn_registry/cpp/build/linux/apps/altsnap_jitter_test/altsnap_jitter_test
    timeout_s: 60
    severity: critical

  # Verifica que el .ico esta presente.
  # add_imgui_app genera altsnap_jitter_test_appicon.rc; si el .ico falta el build
  # mingw pasa pero el .exe Windows queda sin icono embebido.
  - id: icon_exists
    cmd: "test -f /home/lucas/fn_registry/apps/altsnap_jitter_test/appicon.ico"
    timeout_s: 5
    severity: warning

  # Cross-compila para Windows via mingw-w64, despliega al Desktop de Windows
  # (matando instancia previa con taskkill.exe), y lanza el .exe nativamente
  # desde WSL con WSL interop. Corre las 6 fases completas (p1-p6).
  # Exit 0 = p1 PASS + p2 PASS (renders_during=0) + p3 PASS + p4 PASS +
  #           p5 PASS (alt_rmb delta=1) + p6 PASS (alt_lmb delta=1).
  # Exit != 0 = alguna fase FAIL o crash del harness.
  #
  # severity: warning porque requiere:
  #   - WSL2 con interop habilitado (cmd.exe / taskkill.exe en PATH)
  #   - mingw-w64 instalado (sudo apt install mingw-w64)
  #   - /mnt/c/Users/lucas/Desktop accesible
  #   - cpp/build/windows pre-configurado (build_cpp_windows.sh)
  # En CI Linux puro este check no puede correr. En la maquina de desarrollo
  # (home-wsl) es el check mas valioso: detecta regresiones del WndProc subclass
  # real bajo Win32 que xvfb no puede cubrir.
  - id: windows_run
    cmd: >
      FN_REGISTRY_ROOT=/home/lucas/fn_registry
      bash -c '
        source /home/lucas/fn_registry/bash/functions/infra/e2e_run_cpp_windows.sh
        e2e_run_cpp_windows altsnap_jitter_test
      '
    timeout_s: 300
    severity: warning
    expect_stdout_contains: "overall=PASS"
