fix: flashs de navigation — la zone swapée n'est plus peint non montée (v7.45.3)
- Symptôme : à chaque changement de page/section, une rafale de fenêtres / menus / états s'affiche une fraction de seconde avant la page voulue. - Cause : pendant la fenêtre x-ignore (swap fdLoad → Alpine.initTree, mise en place en v7.45.2), .main-wrapper était peint NON montée : tous ses [x-show] visibles à leur valeur brute, puis masqués d'un coup au montage. Mesure (e2e/probe_nav_perf.spec.js sur l'instance locale) : 19 éléments bruts visibles 87 ms sur /library (CLS 0.149, sources lib-loading/lib-empty/ lib-table), 80 éléments pendant 732 ms sur /settings, 7 sur /workspaces. - Fix (app.js, handler htmx:afterSwap) : opacity:0 + pointer-events:none posés dans la même task que le swap (aucun paint intermédiaire possible), retirés APRÈS Alpine.initTree sur les 3 chemins de démontage (scripts chargés, zéro script, filet 4 s). reveal() est appelé avant les early-returns de done() → impossible de rester bloqué invisible. - Après : 0 frame de contenu brut peint sur les 4 navigations du probe, 1–2 frames masquées, zone révélée (opacity:1, pointer-events:auto) et montée (0 [x-show] non montés, x-ignore absent) à chaque fois. - Gate : e2e/probe_nav_perf.spec.js — marques htmx, fenêtre x-ignore, échantillon par frame des [x-show] bruts peints, layout-shift + assertion (0 brut / zone révélée et montée), exécutable en CI. - Reste (non traité, voir ROADMAP) : CLS résiduel 0.057 sur /library (états loading → table), fenêtre x-ignore de ~250 ms sur /settings (coût des scripts de page), topbar incluse dans .main-wrapper re-swappée à chaque nav. Gates : probe_nav_perf + regression_partial_nav + regression_editor_mount + regression_logout_dnd + smoke · pytest 1094 passed · ruff OK · OpenAPI 7.45.3.
This commit is contained in:
@@ -1,5 +1,31 @@
|
||||
# Changelog - FlowDeck
|
||||
|
||||
## v7.45.3 (2026-10-03) — Navigation partielle : le contenu brut n'est plus peint
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Flashs de fenêtres / frames à chaque changement de page ou de section** :
|
||||
pendant la fenêtre `x-ignore` (swap → `Alpine.initTree`), la zone
|
||||
`.main-wrapper` était peinte **non montée** — tous ses `[x-show]` visibles à
|
||||
leur valeur brute (menus, panneaux, états loading/empty/table superposés), puis
|
||||
masqués d'un coup au montage Alpine. Mesure (`e2e/probe_nav_perf.spec.js`,
|
||||
instance locale) : **19 éléments bruts visibles sur 87 ms** en arrivant sur
|
||||
/library (CLS 0.149, sources `lib-loading`/`lib-empty`/`lib-table`), **80
|
||||
éléments sur 732 ms** sur /settings, 7 sur /workspaces, 0 sur /trash. Fix :
|
||||
`opacity: 0` + `pointer-events: none` posés **dans** le handler
|
||||
`htmx:afterSwap` (même task que le swap → aucun paint intermédiaire possible)
|
||||
et retirés **après** `Alpine.initTree` sur les 3 chemins de démontage (scripts
|
||||
chargés, zéro script, filet 4 s). Seul le contenu monté est peint.
|
||||
|
||||
### Added
|
||||
|
||||
- **`e2e/probe_nav_perf.spec.js`** — probe de fluidité de navigation : marques
|
||||
htmx (`beforeRequest`/`beforeSwap`/`afterSwap`/`afterSettle`), fenêtre
|
||||
`x-ignore`, échantillon par frame du nombre d'`[x-show]` bruts encore
|
||||
visibles et d'`[x-cloak]` masqués, `layout-shift` (CLS) avec sources.
|
||||
`node node_modules/@playwright/test/cli.js test probe_nav_perf` (npx est cassé
|
||||
sur ce poste).
|
||||
|
||||
## v7.45.2 (2026-10-03) — Navigation partielle : montage Alpine sans course + scripts idempotents
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in New Issue
Block a user