From 3a8a75f2051200a6ee00833d04f16272e93c84f6 Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Tue, 19 May 2026 00:31:31 +0200 Subject: [PATCH] chore: auto-commit (2 archivos) - app.md - appicon.ico Co-Authored-By: Claude Opus 4.7 (1M context) --- app.md | 11 +++++++++++ appicon.ico | Bin 11304 -> 12899 bytes 2 files changed, 11 insertions(+) diff --git a/app.md b/app.md index 153a74f..08f8a27 100644 --- a/app.md +++ b/app.md @@ -2,6 +2,7 @@ name: altsnap_jitter_test lang: cpp domain: tools +version: 0.1.0 description: "Regression test for multi-viewport window jitter + iconified survival + Alt+RMB resize + Alt+LMB move. Six phases: p1 main-window sync, p2 AltSnap on main HWND, p3 AltSnap on secondary viewport HWND, p4 iconify+restore preserves floating panels, p5 Alt+RMB consumed by WndProc, p6 Alt+LMB consumed by WndProc." tags: [imgui, test, regression, headless] uses_functions: [] @@ -96,3 +97,13 @@ En Linux/xvfb p2-p6 reportan SKIPPED. P1 puede mostrar lag pre-existente bajo xv - `keybd_event(VK_MENU)` NO es fiable para drivear `GetAsyncKeyState` desde tests headless cross-compilados — la sesion de input del proceso no esta foreground. Usa `set_force_alt_for_test(true)` + `SendMessageW` sincrono mismo-hilo. Bypassa kernel-input filter (que dropea silenciosamente `PostMessage(WM_RBUTTONDOWN)` sintetizado). - ImGui_ImplGlfw subclassea el HWND despues que nosotros (vendor `cpp/vendor/imgui/backends/imgui_impl_glfw.cpp` linea ~820, captura `bd->PrevWndProc = our_subclass`). Por eso ImGui llama a nuestro WndProc via `CallWindowProc(prev_wndproc, ...)` y todos los mensajes nos llegan en orden correcto. No re-subclassear (provoca recursion infinita via cycle). - Test mode (`set_force_alt_for_test(true)`) hace que el WndProc cuente pero NO postee `SC_SIZE`/`SC_MOVE` — evita quedarse atrapado en modal sizemove. La parte "entrar al modal" se valida por p2/p3 fakeando `WM_ENTERSIZEMOVE` directamente. + + +## Capability growth log + +Una linea por bump SemVer. Bump-type segun `.claude/commands/version.md`: +- `major`: breaking observable (CLI args, schema BBDD propia, formato wire). +- `minor`: feature aditiva (nuevo panel, endpoint, opcion). +- `patch`: bugfix sin cambio observable. + +- v0.1.0 (2026-05-18) — baseline. diff --git a/appicon.ico b/appicon.ico index d883afeaab4003555dc739b68b43871a612bbc1b..e44f5dc8d563d81c7a35230ec977c125886c2884 100644 GIT binary patch literal 12899 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 PY{t}AV2=8Kr?CGQ!4+Af literal 11304 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 Lc&h!!{@(upbW@8b