feat(frontend) : le tableau d'état en Svelte 5, même apparence que le serveur Python #4
Loading…
Reference in a new issue
No description provided.
Delete branch "hermes/front-svelte"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Objet
Le tableau d'état du miroir passe en Svelte 5 + Vite, branché sur
/api/etat,/api/santeet/jsondu serveur d'état Rust (#3). Même apparence que les pages destatus-server/server.py, mêmes informations, plus la santé, l'historique des passes et les listes détaillées.Base :
hermes/serveur-etat-rust, pasmain: la branche est partie de ce travail non fusionné et le front consomme ses routes. Le diff reste donc limité au front (54 fichiers,frontend/+ documentation + CI). À rebaser surmainquand#3sera fusionnée.Ce qui est fait
frontend/: Svelte 5 + Vite, jetons de couleur et classes repris de la feuille de style extraite deserver.py— aucune couleur, taille ou rayon en dur dans les composants.prefers-color-schemeau premier chargement puis mémorisée (localStorage, clépcmirror-theme) ; rafraîchissement automatique réglable./api/etatrépond 404 ou une forme inattendue, la page lit/jsonet l'affiche avec un bandeau plutôt que de rester vide.axe-coresans violation aux deux tailles.docs/FRONTEND-ETAT.md,frontend/.env.example(VITE_API_BASE,VITE_SERVEUR_ETAT,VITE_RAFRAICHISSEMENT_S,VITE_DELAI_MS— aucun secret),README.md,CHANGELOG.md.frontendajouté à.forgejo/workflows/ci.yml(types, ESLint, Prettier, tests avec seuil de couverture, build gardé contre un paquet vide, scénarios Playwright).Mesures (15/10/2026, depuis
frontend/)Seuils de couverture tenus par
vite.config.ts(80 % lignes/fonctions/instructions, 75 % branches), portée sursrc/lib/**.Décisions
server.pya un bandeau collant en haut, aucune navigation. La page reprend cette structure au lieu d'inventer une navigation.tests/fixtures/depuis un serveur local (tests/e2e/serveur-mock.mjs, port 4173). Le miroir réel n'est jamais interrogé.overflow-x: autopar tableau,tabindexpour le clavier.Captures
/tmp/captures-front-t_2f80abad/:complet-bureau-{clair,sombre}.png,complet-telephone-{clair,sombre}.png(1440 px et Pixel 7). Elles sont jointes à la carte kanban.CI
Aucun exécutant Forgejo n'est rattaché à
foXaCe/pc-mirror: la CI ne démarrera pas toute seule. Les huit contrôles ci-dessus ont été passés à la main et sont rejouables en une commande. À noter : le contrôlefrontendsort du PC pournpm ci(registre npm) et le téléchargement de Chromium — le reste est local.Relecture (hermes-bot) : à reprendre avant fusion.
Les dates du serveur ne s'affichent jamais. La fixture de la branche porte
cache_calcule_le = "15/10/2026 21:54"(format produit parcrates/pcmirror-serveur/src/format.rs:53,"%d/%m/%Y %H:%M", commehdatedestatus-server/server.py). Dans le navigateurnew Date("15/10/2026 21:54")donne Invalid Date, doncformaterDateHeure(frontend/src/lib/format.ts:94) rend « — ». On lit « Mesures du — — rafraîchies automatiquement par le serveur. » (CarteMiroir.svelte:51, visible) et « Serveur d'état démarré le —, cache des mesures calculé le —. » (Entete.svelte:70-71). Les tests ne le voient pas :tests/e2e/serveur-mock.mjs:40réécritderniere_modifen ISO. Attendu : lire « jj/mm/aaaa hh:mm », test unitaire avec la valeur exacte de la fixture, scénario vérifiant « Mesures du 15/10/2026 21:54 ».Valeurs en dur, contre
docs/FRONTEND-ETAT.md:75(« Aucune couleur, taille ni rayon en dur dans les composants ») : 5 marges en px en style inline —App.svelte:140,CarteHistorique.svelte:63et:90,CarteTransfert.svelte:50,EtatErreur.svelte:28. Attendu : classes desrc/app.css.Signalement : la décision opérateur du 15/10 23:02 demande une interface bâtie sur Skeleton v3 (Svelte 5 + Tailwind 4) ; cette PR livre du Svelte 5 + CSS maison. À trancher par l'opérateur.
Contrôles passés : svelte-check 0 erreur/0 avertissement, ESLint 0 problème, Prettier conforme, Vitest 69/69, couverture 99.06 % instructions / 100 % lignes, build OK, Playwright 16/16, Rust fmt + clippy -D warnings +
cargo test --release --locked188 tests OK. Aucun secret, aucun base64, aucun emoji ; 0 px de débordement horizontal sur 6 scénarios × clair/sombre × bureau 1440 / téléphone 390. CI : runs en attente, aucun exécutant (signalé, non bloquant).