chore: nettoyage Dependabot v0.5.0 + fixes reveal.js 6.x - #116
Merged
Merged
Conversation
Deux prompts KERNEL calibrés Sonnet, jouables indépendamment : - 01 : triage Dependabot + nettoyage issues (fermeture sur accord) - 02 : audit code lecture seule, rapport priorisé sur tout le repo Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nce npm (Cluster A) Supprime la copie source complète de reveal.js 3.8.0 (4 Mo, figée depuis 2020, jamais retouchée, source de 78 des 118 alertes Dependabot ouvertes) au profit de reveal.js@6.0.1 installé via npm et synchronisé dans le showcase à la volée (scripts/sync-showcase-reveal.mjs, non commité). showcase/index.html reconstruit depuis le demo officiel reveal.js 6.x, en conservant l'injection tc-component (corrige au passage un bug préexistant : script chargé en text/javascript au lieu de module). Corrige aussi une race condition dans RevealEngine.goToSlide() qui plantait quand une commande de navigation arrivait avant que Reveal ait rendu les slides dans le DOM (Cannot read properties of undefined reading 'fMax') — non lié à la version de reveal.js, découvert lors du test manuel de l'upgrade faute de couverture e2e existante. Vérifié manuellement : showcase, stage view et presenter view de TalkControl fonctionnent avec reveal.js 6.0.1 (rendu, notes, timer). 198/198 tests passent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Cluster B : migre ngrok@3.4.1 (dépend de `request`, déprécié) vers le SDK officiel @ngrok/ngrok — API mise à jour dans tunnel.ts (ngrok.forward() + listener.url() au lieu de ngrok.connect()). - Cluster C : retire commitizen + @commitlint/cli (jamais branchés à un hook ni à la CI, config morte) et leur config associée. - Cluster D : bump http-server 0.12.3 -> 14.1.1 pour le showcase, et portfinder -> 1.0.38 pour éliminer la dernière alerte async. - Cluster F : remplace npm-run-all (non maintenu) par npm-run-all2, fork actif avec les mêmes binaires (aucun changement de script). - Cluster G : bump wait-on 4 -> 9 (élimine sa dépendance à `request` et `uuid`), @babel/runtime et brace-expansion mis à jour dans leurs ranges existants, override `y18n` -> ^4.0.1 (transitif de qrcode, utilisé uniquement par son CLI qu'on n'exécute jamais). Reste volontairement non traité : la chaîne vite/esbuild/vitepress (nécessite un bump majeur de Vite, étude séparée) et le Cluster E (follow-redirects, composant critique, non-régression à part). tsc --noEmit propre, 198/198 tests passent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…reveal.js 6.x reveal.js 6.x introduit `scrollActivationWidth` (défaut 435px) : sous ce seuil, il bascule automatiquement en "Scroll View" natif, une fonctionnalité inexistante en 3.8.0. Ce mode restructure le DOM (.slides > div.scroll-page au lieu de .slides > section) et prend la main sur le scroll/touch natif. Deux effets de bord observés en usage réel : - Le panneau "next slide preview" du presenter (plus étroit que 435px) bascule en Scroll View, cassant getSlides()/goToSlide() (silencieux depuis le fix précédent, mais plus aucune navigation ne s'y reflétait). - presenter-mobile.html (~360px de large) déclenche le même mode, dont la gestion tactile native entre en conflit avec le plugin touchInput de TalkControl, qui gère lui-même les gestures de swipe. TalkControl pilote sa propre navigation de bout en bout ; le Scroll View natif de reveal n'a jamais de raison de s'activer. Fix : scrollActivationWidth à null dans RevealEngine.init(), qui court-circuite la vérification (`typeof f.scrollActivationWidth === 'number'`) dans reveal.js. Vérifié : structure .slides>section préservée à 360px et sur le panneau preview, navigation clavier reflétée sur les deux panneaux du presenter. 198/198 tests passent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
reveal.js 6.x lit et réécrit location.hash pendant son initialisation (routing par hash pour le deep-linking). Ça entre en course avec tc-component.bundle.js (script module, différé) qui lisait aussi location.hash pour connaître son "delta" (0 = slide courante, 1 = preview de la slide suivante côté presenter). Reveal gagnait systématiquement la course et vidait le hash avant notre lecture, donc delta retombait toujours à 0 par défaut. Résultat observable : le panneau "next slide preview" du presenter affichait la slide courante au lieu de la suivante, et ne semblait "suivre" aucune navigation clavier de façon cohérente. Fix : delta et focus transitent maintenant par la query string (?delta=1) au lieu du hash (#delta=1) — reveal.js ne touche jamais à location.search, donc plus de race condition possible. Vérifié manuellement : après ce fix, le panneau preview du presenter affiche bien la slide suivante et reste correctement décalé d'un cran sur plusieurs navigations successives. 198 tests unitaires + 24 tests composants passent (dont 3 nouveaux/mis à jour dans slide-view.spec.ts pour couvrir la construction de l'URL en query param). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deux bugs préexistants (aucun lien avec reveal.js), jamais détectés
faute de test avec presenter + on-stage connectés simultanément :
1. Le serveur rediffuse `pluginsList` à TOUS les clients connectés
(io.emit) à chaque fois que N'IMPORTE LEQUEL d'entre eux envoie
'init' — dès que deux vues sont ouvertes (presenter + on-stage),
chaque plugin non-auto-activé (ex: touchPointerInput) apparaît en
double dans le menu Plugins. Fix côté client : menu-plugins.ts
ignore maintenant l'ajout d'un item déjà présent dans la liste.
2. touch-pointer-mask.ts et touch-pointer-settings.ts déclaraient
leurs propriétés réactives Lit comme de simples class fields
(`pointer = {...}`, `pointerColor = '...'`, `foo!: Type`). Avec la
cible TypeScript ES2022 du projet (useDefineForClassFields), ça
écrase silencieusement les accesseurs générés par Lit et empêche
tout rendu (shadowRoot reste vide, seul un warning dev-mode Lit
apparaît en console). Fix : `declare` sur ces champs + valeurs par
défaut déplacées dans le constructeur, même pattern déjà utilisé
correctement dans slide-view.ts. Recherche exhaustive : aucun autre
composant Lit du projet n'a ce problème.
Vérifié manuellement avec presenter + on-stage ouverts en parallèle :
un seul "touchPointerInput" dans le menu, le mask (bordure rouge) et
le panneau de réglages (couleurs) s'affichent à l'activation, et un
déplacement de souris sur le mask du presenter met bien à jour la
position/couleur du pointeur sur la vue on-stage.
198 tests unitaires + 27 tests composants (dont 3 nouveaux pour la
déduplication du menu) passent. tsc --noEmit propre.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Le job E2E utilisait un chemin codé en dur vers une copie imbriquée de
playwright (node_modules/@playwright/test/node_modules/playwright/cli.js)
qui n'existe pas forcément après un `npm ci` propre selon la façon dont
npm hoiste/déduplique les dépendances (ENOTDIR en CI) — ce chemin
fonctionnait seulement par accident d'historique d'installation locale.
@playwright/test embarque en fait son propre cli.js directement
(node_modules/@playwright/test/cli.js), sans avoir besoin de descendre
dans un node_modules imbriqué. C'est ce chemin stable qu'il faut utiliser
pour exécuter les specs e2e (qui importent `test`/`expect` depuis
@playwright/test), afin de garantir qu'on utilise la même instance de
Playwright que celle avec laquelle les specs ont été écrites — sinon
Playwright refuse de lancer les tests ("two different versions of
@playwright/test").
La dépendance `playwright` (standalone) au niveau racine reste
nécessaire : c'est une peerDependency obligatoire de
@vitest/browser-playwright pour les tests de composants en mode
navigateur, pas une redondance à supprimer.
Preexistant sur develop (déjà en échec avant cette branche), corrigé
ici pour débloquer la CI de la PR. 24/24 tests e2e passent en local
avec le chemin corrigé.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…s seuils manquants Le check Coverage échouait déjà sur develop : les web-components (testés en mode navigateur via vitest.browser.config.ts) ressortaient à 0% dans le rapport car leur exécution est séparée de la config jsdom. On fusionne désormais les deux via le reporter blob + --mergeReports de Vitest 4, et on comble le reste de l'écart (branches surtout) avec des tests pour les 3 plugins d'input jamais testés (touch-pointer, keyboard, touch), le service presentation, le bootstrap tc-component et les cas limites du moteur revealjs-server-engine. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Résumé
Triage complet des alertes Dependabot (118 → 3 ouvertes) et migration reveal.js 3.8.0 → 6.0.1, avec les régressions découvertes et corrigées au passage.
Dependabot (clusters A-G)
reveal.js@6.0.1), synchronisée à la volée dans le showcase via un script non commité.ngrok(dépend derequest, déprécié) vers le SDK officiel@ngrok/ngrok.commitizen/@commitlint/cli(config morte, jamais branchée à un hook ni à la CI).http-server0.12.3 → 14.1.1 +portfinder→ 1.0.38.npm-run-all(non maintenu) parnpm-run-all2(fork actif, binaire identique).wait-on4→9 (élimine sa dépendance àrequest/uuid),@babel/runtime,brace-expansion, overridey18n.Reste volontairement non traité : la chaîne
vite/esbuild/vitepress(nécessite un bump majeur de Vite, étude séparée).Régressions reveal.js 6.x découvertes et corrigées
scrollActivationWidth(nouvelle feature 6.x) activait automatiquement le "Scroll View" natif sur les vues étroites (preview presenter, mobile), cassant la navigation et le plugin touch de TalkControl → désactivé.location.hashà l'init, entrant en conflit avectc-component.bundle.jsqui l'utilisait pour connaître sondelta(slide courante vs preview de la suivante) →delta/focuspassent maintenant par la query string.pluginsListà tous les clients connectés à chaque init, dupliquant les entrées du menu Plugins quand presenter + on-stage sont ouverts simultanément → dédoublonnage côté client.touch-pointer-mask.ts/touch-pointer-settings.tsdéclaraient leurs propriétés Lit sansdeclare, cassées paruseDefineForClassFields(cible ES2022) → shadowRoot ne rendait plus rien.Test plan
tsc --noEmitproprehttp-proxy/follow-redirectsaprès redémarrage serveur (non-régression composant critique)🤖 Generated with Claude Code