Onglet Top vidéos : repli /processus/?top, styles de la base et entrée dans le relevé d'homogénéité (STUD-1226, carte t_579ad264) #1635
Loading…
Reference in a new issue
No description provided.
Delete branch "hermes/top-videos-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?
Carte kanban t_579ad264 — « Implémenter l'onglet Top vidéos en Svelte » (reprise de STUD-1226).
Ce que la carte demandait, et ce qui manquait vraiment
Le composant
_tableau/front/src/Top.svelteest déjà dansmaindepuis la PR #1576 (STUD-1226). L'inventaire deparité (carte t_5263bc76, commentaire n° 163) a mesuré deux manques réels sur cette carte :
/processus/?topétait promis par un commentaire demain.jsmais jamais implémenté : l'onglet ne montait quesur
#top-app(la page Python). Conséquence : sur la page d'essai, l'onglet Top n'était ni regardable nimesurable — le relevé d'homogénéité STUD-1185 ne listait pas sa page, et un rechargement après un filtre
retombait sur Processus (l'onglet réécrivait l'adresse sans son marqueur).
<a>sansdata-base(titre, miniature,lien Studio) et une infobulle à 13 px là où tout le tableau est à 12 px.
Ce que la branche fait
main.js: repli?topmonté dans#processus-app(et retiré de la cible de Processus, sinon les deux onglets sesuperposaient). Données :
data-donneessur la page Python (inchangé),/api/topsur la page d'essai.apercu.py: sert/api/topdepuisfront/tests/api-top.json, réponse figée produite partop_donnees.donnees_top(heure du relevé d'homogénéité, 2026-10-13 16 h 12) — 8 lignes publiques, 3 non publiques, un gain négatif, un gain
inconnu (
null, jamais 0), une chaîne sans réponse Analytics.lib/top.js+Top.svelte:versAdresseOngletgarde le marqueur de page (?top) dans l'adresse.Top.svelte: liens passés àdata-base="lien"+LIENde la base, infobulle àtext-xs. La vedette prend laprésentation de l'Accueil (
Lien« Voir sur YouTube », titre en texte), la miniature reste cliquable.homogeneite.py+homogeneite-releve.mjs: la pagetopentre dans le relevé (11 pages × 4 configurations).Preuves (sorties réelles)
Deux tests nouveaux reproduisent la panne : sur le
main.jsd'avant, les deux assertions du repli échouent(vérifié sur
git show HEAD~2:_tableau/front/src/main.js, « ÉCHEC repli ?top », « ÉCHEC lecture /api/top »).Non-régression de la page Python : page rendue par
rendu-fige.pyservie avec/api/topen 404, l'onglet montequand même ses chiffres depuis
data-donnees(mesuré dans Chrome :[data-top-pret]présent). L'ancien onglet Pythonreste accessible (
#o-ancien-top, panneaup-top-ancien) et#o-topreste l'onglet de la barre.Captures
Bureau (1600) et téléphone (390), clair et sombre :
top-bureau-sombre.png,top-bureau-clair.png,top-telephone-sombre.png,top-telephone-clair.png(relevé d'homogénéité, captures pleine page). Vérifié à l'œil :pas de débordement horizontal (
scrollWidth == clientWidth), aucuntitle=natif, aucun emoji, tous les liens à12 px
--text-link, 24 infobulles, et le dernier paragraphe entier dans le DOM (le relevé le coupait : sa capture estlimitée à la fenêtre ; une capture
captureBeyondViewportle montre complet).À trancher par l'opérateur (dit, pas caché)
YouTube »). Rien n'est perdu — la miniature reste cliquable, « Studio » reste là, et la liste garde ses titres
cliquables. Si l'opérateur préfère le titre cliquable de la vedette, c'est une variante à proposer, pas un écrasement.
> 500(le libellé dit « plus de 500 ») alors que le Python colorait à≥ 500: écart d'uncran déjà relevé par l'inventaire, non touché ici.
BarreOutils(base) reste visible à 390 px, ce qui estincongru au téléphone — même comportement dans tous les onglets ; à porter au porteur de la base.
Hors périmètre de cette carte
/api/top(route Rust) appartient à t_c54aeea1 et la bascule du front sur cette route à t_87c3e84d : le banctest_100_svelte_rust.pycontinue d'y lister le Top vidéos (page Python, 0 %), c'est attendu./processus/?top(promis par main.js, jamais implémenté) et les styles de la base 87b23512efCause : le relevé ne listait pas la page du Top vidéos, alors que la charte demande qu'un nouvel onglet soit mesuré comme Processus (« un onglet Svelte et un onglet Python sont indiscernables »). Deux écarts réels y sont apparus au premier passage : l'infobulle de la ligne sans relevé et quatre liens hors base. Remède : `("top", "/processus/?top")` dans les pages du relevé, la réponse figée passée à l'aperçu, et le pilote Chrome qui attend la marque de montage `data-top-pret`. Mesuré après correctif : 44 relevés (11 pages × 4 configurations), 5 écarts connus, 0 nouveau, 0 résolu.Relu, conforme. Vérifié dans un arbre de travail dédié (
hermes/top-videos-svelte, têteb3979424, base119f2c12=origin/main) ; diff de 10 fichiers, +317 −39, rien hors_tableau/front/et_tableau/test_*.b3979424: pc-studio verte 4/4 (Rust push/PR, Front Svelte push/PR).cargo test --release --locked(_tableau/rust) : 38 tests, 0 échec, code 0.npx vitest run: 20 fichiers, 168 tests passés.vite build: code 0,dist/903 158 octets.topy entre pour la première fois : 90 éléments à 1 600 px, 63 à 390 px), 5 écarts connus, 0 nouveau, 0 résolu. Comparaison pixel à pixel avec les références : NON MESURÉE (cette machine n'a pas de référencecachyos-x8664-chrome155), dit par le script lui-même.apercu.py, données figées, Chrome 155 sans tête, heure de Paris figée) : 4 captures dans~/atelier-hermes/captures-t_24dfb027/(bureau et téléphone, sombre et clair) ; 0 attributtitle, 0 emoji, 0 erreur console, aucun débordement horizontal à 390 px (scrollWidth= 390).?top&etat=short, 11 → 2 lignes ; deux clics sur l'en-tête « Vues » →?top&etat=short&tri=-vues, la première ligne change ; « Réinitialiser » →?top, 11 lignes. Le marqueurtopreste dans l'adresse dans les trois cas. Par l'adresse :?top&chaine=Minute Sport→ 1 ligne,?top&periode=semaine→ 4 lignes,?top&etat=long&tri=vues→ 6 lignes.i.ytimg.com), aucune cassée.#303030à 88 %, texte blanc, 12 px, rayon 8 px, ombre — identique en sombre et en clair, comme la charte le demande.Réserve, à trancher par vous : le titre de la vedette n'est plus un lien (avant :
<a>; après : texte + « Voir sur YouTube »). La règle 4 deCHARTE-UI.mddemande qu'une PR qui retire une fonction visible d'un onglet Svelte le dise dans son titre et ne se fusionne pas sans votre accord écrit. Trois liens restent vers la vidéo : la miniature, « Voir sur YouTube » et « Studio ». L'étiquetteoperateurest posée à la place derelu: la fusion vous revient.fusion-auto: pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.b3979424b9d5af1081a6À l'opérateur de fusionner — relecture du rebasage : conforme. Aucune étiquette posée par moi (surtout pas
relu: cette PR retire une fonction visible de l'onglet, règle 4 de_tableau/CHARTE-UI.md, c'est vous qui fusionnez). Rien fusionné,mainnon touchée, aucun fichier du dépôt modifié.Relecture faite par
relecteur2(cartet_64c784dc) dans un arbre dédié~/atelier-hermes/wt/t_64c784dc, jamais dans la copie principale ; arbre retiré après coup.1. Plus de conflit, et la tête a changé
Rejoué contre le
mainde 00 h 05 (52de10c3), pas seulement contre celui du rebasage (e6d89457).2. La résolution garde les deux apports
Occurrences de
analytiqueet detoppar fichier — main =52de10c3, avant =b3979424, après =d5af1081:_tableau/front/apercu.py_tableau/front/homogeneite-releve.mjs_tableau/front/homogeneite.py_tableau/front/src/main.js_tableau/test_apercu_front.pyCe qui serait tombé, fichier par fichier : la version de la branche (
b3979424) ne connaissait pas l'Analytique, donc une résolution qui aurait gardé « ma version » aurait emporté l'Analytique dans les cinq fichiers — la route/api/analytiqued'apercu.py, la page?analytiqued'homogeneite.py, le[data-analytique-pret]du relevé, le blocanademain.jsavec son entrée dans la garde anti-double-montage, et les assertions Analytique du banc d'aperçu. Symétriquement, garder la version demainaurait emporté le Top vidéos (/api/top, la page?top,[data-top-pret], le bloctop, ses assertions).Lignes Analytique restaurées par le rebasage, mesurées en
git diff b3979424 d5af1081 -- <fichier>:apercu.py+7,homogeneite-releve.mjs+1,homogeneite.py+2,src/main.js+4,test_apercu_front.py+3. Et rien d'autre n'a été ajouté :git diff b3979424 d5af1081sur ces cinq fichiers ne montre que du contenu Analytique (relecture ligne à ligne des cinq diffs).3. Le fond du diff n'a pas bougé
Le contenu propre de la branche est le même avant et après le rebasage :
Les trois insertions et deux suppressions de plus sont la seule union :
analytiqueettopdans la signature et le__main__d'apercu.py, la pageanalytiqueet la pagetopdanshomogeneite.py, l'attente d'union de_tableau/front/tests/top.test.js(49 → 50 lignes touchées).Pour mémoire, la comparaison demandée avec
git diff --stat 119f2c12 b3979424(15 fichiers, +321 −288) n'est pas comparable, et c'est confirmé ici :119f2c12est un commit demainpostérieur à la fourche de la branche (a1988661) ; ce diff-là compte donc aussi l'aller-retour demainentre les deux. Le bon repère avant rebasage estgit diff --stat a1988661 b3979424→ 10 fichiers, +317 −39, exactement le même ensemble de fichiers qu'après.4. Les bancs, rejoués dans l'arbre
Ce rouge n'est pas imputable au rebasage, et je le prouve plutôt que de l'affirmer : le même banc, rejoué à la même heure sur
main(52de10c3, dans un second arbre dédié) →Cause mesurée :
tests/stockage.test.js:15fixereleve: '2026-10-14T20:44:00+00:00'et la ligne 73 rend le composant à l'heure courante ;_tableau/front/src/lib/format.js:258écrit « hier à … » dès que la journée de Paris du relevé n'est plus celle du jour. Passé minuit (Paris) dans la nuit du 14 au 15/10, l'assertion tombe — surmaincomme sur la branche. Le 4/4 vert cité plus bas a tourné avant minuit (push du rebasage à 23 h 53). C'est un banc daté demain, hors du périmètre de #1635 : une carte de suite a été ouverte pour lui.5. La PR, à l'instant de la relecture
Aucune étiquette posée ni retirée par moi ; aucune fusion.
6. Ce que je n'ai pas mesuré
mainne déploie et la page est derrière/connexion. Non mesuré./processus/?top: montée, bloc vedette avec « Voir sur YouTube » et « Studio », aucun emoji, rien de cassé ;/processus/?analytique: toujours monté, courbes et fiches présentes), pas la page Python qui embarque#top-app.cachyos-x8664-chrome155: aucune comparaison pixel à pixel.maindécrit au § 4.fusion-auto: pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.d5af1081a6fcd4ddaa1cfcd4ddaa1c27aa624080Rebasé sur
mainet poussé (e1730b60).Conflit
_tableau/front/src/Top.svelteavec l'unification des composants (#1609, déjà fusionnée) : la carte partait d'une version antérieure oùMiniaturevenait delib/composantset où la pastille de chaîne s'appelaitPastilleChaine. Résolution : la version de main est gardée (composants de la base,Point, classes deMiniature) et l'apport propre à cette carte est réinjecté — le lien « Voir sur YouTube » (<Lien href={lien(v.id)}>) etLIENpour le titre. Rien de main n'est retiré.Deuxième passe : cinq lignes de marqueur de conflit étaient restées dans le fichier et le rendaient non compilable (
Unexpected token,tests/top.test.jsne se chargeait pas) — retirées.Mesures locales : 43/43 fichiers, 374 essais verts ;
npx vite buildcode 0, 1881 octets + 964K de JS. CI : la verte porte surfcd4ddaa; le run du nouveau sommet est en cours.fusion-auto: pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.e1730b60879e0eedb8dffusion-auto: pas de fusion, la CI est rouge (Front Svelte). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.9e0eedb8df83dcceeacfRelevé de la forge sur la tête poussée
83dcceea: 4 relevés sur 4 verts, état globalsuccess— l'étiquetteci-rougea disparu (la forge l'a retirée elle-même).Tests du tableau (Rust + Svelte) / Rust (_tableau/rust)(push) — succès en 7 min 22 sTests du tableau (Rust + Svelte) / Rust (_tableau/rust)(pull_request) — succès en 6 min 23 sTests du tableau (Rust + Svelte) / Front Svelte (_tableau/front)(push) — succès en 1 min 47 sTests du tableau (Rust + Svelte) / Front Svelte (_tableau/front)(pull_request) — succès en 1 min 58 sCe qui a changé depuis la tête précédente (
9e0eedb8) : un seul commit au-dessus demain(le commit a été amendé), la branche rebasée surorigin/main, et les écartsdata-basede_tableau/front/src/Top.sveltecorrigés — c'était la cause de l'ancien rouge.Mesures locales, sur la même tête :
npx vitest rundans_tableau/front: 47 fichiers, 417 tests, tous verts (code 0) ;npx vite build: code 0,dist/index.htmlprésent (1,88 kB) etdist/assets/*.jsde taille réelle.Non mesuré : pas de capture d'écran jointe à ce commentaire ; le relevé d'homogénéité du dépôt couvre l'onglet Top et passe dans le job
Front Sveltevert ci-dessus.Mesure demandée du relevé d'homogénéité sur cette tête (
83dcceea), refaite localement après le correctifdata-base:Autrement dit : plus aucun écart nouveau sur l'onglet Top, les 4 écarts restants sont ceux déjà connus et acceptés du dépôt. Le relevé se monte sur un
dist/fraîchement construit (npx vite build, code 0,dist/index.html1,88 kB).Non mesuré : les captures d'image n'ont pas de référence pour ce navigateur (
NON MESURÉ : captures sans référence pour cachyos-x8664-chrome155 (48)) — la référence se pose avec l'accord de l'opérateur.fusion-auto: pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.fusion-auto: pas de fusion, la CI est rouge (Front Svelte). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.fusion-auto: pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.db901183eb7eea821d00