Le détail de chaque fonctionnalité, de ses garde-fous et de ses points d’intégration avec le site. Pour une présentation rapide, voir le README ; pour les choix visuels, DESIGN.md.
Les réglages numériques utilisent des sliders graphite à crans équidistants : glisser pour choisir un palier, relâcher pour enregistrer, ou cliquer sur la valeur pour une saisie exacte. Le seuil de collection, les trois réglages du marché et le plafond d’enchère forcée partagent ce contrôle. Les flèches du clavier passent d’un cran à l’autre ; Échap ou une interruption du geste l’annule. Une valeur personnalisée devient un cran supplémentaire, sans arrondir les plafonds enregistrés. La saisie exacte se valide avec Entrée ou en quittant le champ, et s’annule avec Échap.
Marché + présente ses trois réglages sur une seule ligne sur ordinateur, puis en une colonne sur mobile. Les paliers proposés couvrent les petits montants courants ; la saisie exacte conserve les plafonds de 100 000 WB et les intervalles de 30 à 1 800 secondes.
Comment ça marche ? ouvre une aide contextuelle pour Collection +, Marché +, les enchères forcées et les doublons. Les explications détaillées restent dans cette fenêtre.
lab/pulls-page.html reprend le balisage natif pour prévisualiser la page.chanteur et musique, puis Entrée ou Ajouter. Les chips se retirent individuellement. Le titre, la catégorie et les étiquettes sont comparés sans tenir compte des accents ni des majuscules. Les fragments comptent aussi : chanteur protège chanteurs. La liste reste enregistrée entre les sessions et s’applique uniquement à la défausse automatique ; le bouton manuel reste disponible.Les favoris et les cartes proposées dans un échange en attente sont préservés. Une valeur de vues absente n’est jamais assimilée à zéro. Les cartes à exactement 30 vues sont conservées avec le seuil par défaut.
La défausse est définitive. Pour la défausse groupée, un premier clic affiche la liste exacte des cartes concernées (encadrées sur la page) ; elle ne démarre qu’après « Défausser N cartes ». Pendant l’opération, un bloc indique l’avancement, les cartes du lot en cours et permet d’arrêter ; les cartes en cours sont signalées sur la page. Le résumé final s’affiche en haut du panneau après le rechargement. La défausse individuelle sous une carte reste immédiate. Le compteur exclut les cartes protégées par un mot. La collection et les mots enregistrés sont relus avant chaque série ; les protections sont revérifiées avant chaque lot. Les identifiants des exemplaires restent figés pendant la défausse pour éviter les sauts de pagination. Le bouton groupé utilise la route de défausse native par lots de 50 maximum, sans pause artificielle entre les cartes. La page se recharge après les défausses réussies pour synchroniser les cartes, la pagination et le solde.
Sur la page Collection, les exemplaires d’une même carte présents sur la page forment une pile derrière le plus précieux : rareté la plus haute, puis shiny. Les exemplaires cachés dépassent en éventail, teintés de leur propre rareté, avec un compteur « ×N ». Une pile repliée n’offre pas de défausse : « Déplier les N exemplaires » les affiche côte à côte, chacun avec son bouton Défausser, et « Replier la pile » les regroupe. L’interrupteur « Empiler les doublons » désactive ce regroupement. Le bouton Doublons reste disponible pour toute la collection. Les exemplaires répartis sur d’autres pages ne sont pas empilés ; la défausse groupée les traite comme avant.
La dernière lecture de la collection est gardée localement, par compte, sous une forme réduite (identifiants, titre, catégorie, rareté, vues, image, ATK / DEF, shiny, favori, étiquettes et échanges en cours). À l’ouverture de la page, elle s’affiche immédiatement si elle a moins de 24 heures. Elle n’est pas relue si elle a moins de 10 minutes, sauf si une carte affichée lui est inconnue ; sinon, une relecture discrète se fait en arrière-plan pendant que la page reste utilisable. « Mise à jour il y a N min » indique son âge ; Actualiser force une relecture. Cette copie sert uniquement à l’affichage et au comptage : chaque défausse relit toujours la collection et les échanges avant d’agir, puis met la copie à jour.
Aucun serveur supplémentaire, aucune télémétrie, aucun accès aux autres sites. Le stockage local de l’extension conserve le seuil, la portée, les mots protégés et un cache des résumés de prix séparé par compte. Un résumé est réutilisé pendant 30 minutes, pour tous les exemplaires et raretés d’une même carte. Le dernier prix connu reste disponible jusqu’à 24 heures si son actualisation échoue ; le survol indique alors qu’il est ancien.
Seules les cartes proches de la zone visible sont chargées. Les appels API directs de l’extension partagent désormais une file entre onglets et fonctionnalités, avec 1,5 seconde minimum entre les départs. Une panne réseau, une réponse HTML ou une erreur serveur, dont 525, déclenche une pause commune à partir de 30 secondes ; les refus 403 et limitations 429 commencent à une minute. Les pauses augmentent progressivement jusqu’à 15 minutes, avec une légère variation et le respect de Retry-After, même s’il demande une attente plus longue. Une seule requête vérifie la reprise à la fois. La réclamation automatique des succès attend aussi cette pause avant de charger sa page native.
Les prix reprennent automatiquement, sans bouton à utiliser. Un indicateur animé remplace les textes de reprise automatique pour les prix manquants et dans les barres Collection + et Marché + ; les derniers prix connus restent visibles. Les erreurs de session ou de droits sont revérifiées moins souvent, après 15, 30 puis 60 minutes ; une reconnexion peut rester nécessaire si la session a expiré. Le chargement est suspendu hors ligne ou dans un onglet masqué, et reprend au retour. Les prix visibles sont aussi actualisés après expiration de leur cache. Les vues déjà présentes dans la page restent affichables si l’analyse complète de la collection échoue ; ces données d’affichage ne permettent jamais d’autoriser une défausse. Une réponse en erreur ne produit jamais un faux prix de 10 WB et le HTML d’une panne n’est pas affiché comme message utilisateur. Le WebSocket natif du site reste sous le contrôle de WikiMasters : l’extension ne peut pas réparer une panne TLS de son infrastructure.
Le thème global utilise seulement des feuilles de style et des attributs de présentation sur le DOM natif. Il ne déplace pas les composants et n’en remplace pas les événements. Il ne fait aucun appel réseau.
La réclamation automatique des succès utilise les boutons du site. Depuis les autres pages, elle charge temporairement la page Succès dans un cadre invisible du même site, puis le retire. Elle ne lit aucun jeton et ne déclenche ni achat ni ouverture de paquet. Un verrou partagé évite les réclamations simultanées entre onglets. Les erreurs entraînent des reprises espacées de 1, 2, 4, 8 puis 15 minutes ; une requête encore en cours n’est pas répétée dans la même série. Hors ligne ou en arrière-plan, le traitement est suspendu. Un seul horaire de passage et compteur d’erreurs sont conservés localement.
Si la collection change pendant sa lecture, l’extension conserve les informations déjà affichées, suspend les actions et reprend la lecture après 45 secondes sans interaction. Les reprises répétées sont espacées jusqu’à cinq minutes. Une panne réseau ou serveur, y compris lors du premier chargement, reprend aussi automatiquement après la pause sans exiger d’inactivité. Le retour dans la collection lance une nouvelle analyse ; aucune défausse n’est relancée automatiquement.
Les outils utilisent la session déjà ouverte sur Wiki Masters et ses routes existantes. Ils ne lisent ni ne copient les jetons de connexion. L’adaptateur exécuté dans la page lit la clé React de chaque carte, l’identifiant de compte fourni à la navigation et une liste limitée de champs du profil de jeu nécessaires aux paquets (stock, régénération, blocage et date de vérification humaine). Il ne modifie pas l’état React et n’intercepte pas les requêtes réseau.
Les erreurs de réseau ou du serveur arrêtent une défausse groupée. Une défausse n’est jamais répétée automatiquement après un résultat incertain. Une seule série peut tourner à la fois sur les onglets d’une même origine. Une série continue quand on quitte la collection pour une autre page du site (Paquets, Marché…) : un petit panneau en bas à droite garde sa progression et son bouton Arrêter, puis son résultat quelques secondes ; chaque lot reste revérifié avant son envoi, un autre compte l’arrête, et la collection se recharge au retour. Recharger ou fermer l’onglet l’arrête après le lot en cours.
Les clics pendant une animation sont ignorés, sans être reportés à la carte suivante. La fin du retournement principal rend l’action disponible ; il faut alors un nouvel appui. Aucun délai anti-spam fixe n’est ajouté. Un appui commencé trop tôt et les répétitions d’une touche maintenue ne font pas avancer les cartes. Tout révéler reste disponible pour enchaîner volontairement.
L’expérience ne remplace que le clic de confiance sur le paquet normal, quand l’adaptateur de page confirme le compte, un stock d’au moins 1, l’absence de blocage et une vérification humaine déjà faite (le site décide ensuite quand la renouveler : depuis le 1er octobre 2026, il ne la redemande plus toutes les 12 heures). La raison d’un passage au flux natif est écrite dans la console (« Ouverture laissée au site : … »). Dans tous les autres cas, le flux natif du site s’exécute : vérification, stock vide, état inconnu, Alt + clic, pack PRO ou quotidien. Un clic envoie une seule requête POST /api/packs/open, sans reprise automatique. Une demande de vérification ferme l’expérience et relance le flux natif ; aucun paquet n’est consommé. Une erreur serveur ou réseau est signalée « Résultat à vérifier ». Ouvrir un autre paquet n’accepte qu’un clic ou une activation clavier après navigation par Tab : un appui répété sur Espace ne consomme jamais un paquet. La page se recharge à la fermeture pour synchroniser le stock natif.
L’adaptateur de page remontait jusqu’à 80 niveaux de l’arbre React pour confirmer l’état du paquet. Le bouton du site se trouve désormais à 82 niveaux : aucun état n’était publié, et l’expérience se rabattait sur le flux natif. La limite est maintenant de 400. L’extension n’émet plus de logs dans la console ; les erreurs utiles restent affichées dans l’interface. Les messages réseau du navigateur et les logs du site restent sous leur contrôle. Si l’expérience ne peut pas démarrer, le clic est rendu au flux natif.
La réponse réelle du 27 septembre 2026 fournit le titre dans wikipedia_title, le sous-titre dans category ou summary, et l’état shiny dans owned_copies[].is_shiny. Les images masquées (hide_image, nsfw_image) ne sont pas affichées. Les sons natifs du site (/audio/pack-rip.mp3, card-flip.mp3, legendary-reveal.mp3) sont complétés par une synthèse légère. Les animations sont raccourcies lorsque les animations réduites sont demandées.
« Temps restant max » permet de miser seulement dans les dernières 1, 5, 15, 30 minutes ou dans la dernière heure ; « Sans limite » conserve tous les temps restants. Le réglage « Recherche toutes les » fixe la pause entre les recherches. Ce mode intervient lors des passages, sans garantir une mise à la seconde près. Le switch « Surenchérir si dépassé » autorise une nouvelle mise minimale après une surenchère adverse, toujours sous le max par carte et dans le budget total restant. Par défaut, le temps est sans limite et les surenchères sont désactivées. Les réglages restent verrouillés pendant une session active.
La session démarre uniquement depuis le bouton du marché. Elle reste active pendant la navigation et dans les onglets masqués, tant que le navigateur fonctionne avec un onglet Wiki Masters connecté. Une alarme vérifie les échéances toutes les 30 secondes ; les passages sont donc arrondis à cette cadence. Aucun budget ne se renouvelle automatiquement. Fermer tous les onglets suspend le traitement ; une session active reprend à leur retour. Un onglet qui ne répond plus (gelé, en veille ou resté sur une ancienne version de l’extension) est rechargé en arrière-plan. Les réglages sont séparés par compte.
Le moteur parcourt les enchères publiques par date de fin et relit chaque fiche sous le verrou partagé avant de miser. Il utilise le minimum natif : prix de départ, puis max(ceil(mise courante × 1.1), mise courante + 1). Il exclut vos ventes, les enchères terminées, hors délai et celles que vous menez. Sans surenchère, il exclut aussi celles déjà traitées dans la session. Avec surenchère, il exige une mise précédente confirmée et une mise adverse supérieure avant d’autoriser un nouvel envoi. Les prolongations sont relues et le délai est revérifié avant l’envoi. Les recherches natives et leurs filtres n’en limitent pas la portée.
Le plafond par carte limite chaque montant misé, tandis que le budget de session additionne les mises intégrales : 10 WB puis 13 WB comptent pour 23 WB, même si les 10 WB ont été remboursés. Les enchères forcées gardent leur propre programmation et ne sont pas gérées simultanément par ce mode.
Le budget compte le montant intégral de chaque mise acceptée, même si le site rembourse ensuite une surenchère. Il est réservé sur disque avant l’envoi, partagé entre les onglets et conservé au rechargement. Le solde est vérifié avant chaque mise. Une interruption avec résultat inconnu arrête la session et conserve la réservation ; aucun POST n’est rejoué. Un refus explicite libère la réservation. Les lectures et limitations temporaires reprennent avec un délai progressif ; une session expirée, un accès refusé ou un solde insuffisant arrête les mises. Arrêter interdit les nouveaux envois ; une mise déjà envoyée termine son traitement.
Chaque programmation vise un identifiant d’enchère précis et conserve son plafond entre les rechargements. Le moteur relit l’enchère dans sa dernière minute, vérifie le solde réel puis envoie uniquement la mise minimale nécessaire. Il ne surenchérit pas sur sa propre mise. Le plafond limite le montant engagé sur cette enchère ; il n’additionne pas les mises précédentes remboursées par le site. Le budget de la recherche par mots-clés reste inchangé et ce moteur laisse les enchères programmées au nouveau mode.
Les échéances sont relues sur le serveur, y compris après une mise : WikiMasters peut prolonger de 60 secondes une enchère disputée dans les dix dernières secondes. Le statut En tête indique seulement la meilleure mise actuelle ; Remportée exige la confirmation de clôture du serveur. Une ouverture du navigateur et un onglet WikiMasters connecté sont nécessaires. Les délais du navigateur, les pannes, le solde disponible et les autres enchérisseurs empêchent de garantir le gain.
Les contrôles sont rapprochés dans la dernière minute, environ toutes les neuf secondes lorsque le navigateur le permet. Un réveil programmé et une alarme périodique conservent la planification ; les alarmes peuvent être retardées, notamment lorsque l’appareil est en veille (documentation Chrome). Le moteur relit toujours l’état courant après un retard et n’envoie rien hors de la fenêtre valide.
Un journal est enregistré avant chaque envoi. Arrêter interdit les prochains envois ; une mise déjà envoyée reste engagée. Une réponse perdue ou ambiguë suspend cette programmation et demande une vérification dans Mes enchères, sans répéter le POST. Les limites et les pauses réseau communes restent respectées. Aucune vérification humaine ni restriction du site n’est contournée.
Une mise dont le résultat est incertain bloque toute nouvelle programmation de la même enchère, pour éviter une double mise. Ce blocage ne se lève que sur confirmation explicite : « J’ai vérifié », après contrôle dans Mes enchères ou sur la fiche (« Voir l’enchère »). Le service ne retire jamais une programmation active ou une mise encore en cours. Les programmations terminées peuvent être retirées de la liste.
Les points d’intégration ont été relevés sur le site le 27 septembre 2026. Une modification des routes privées ou du composant de collection peut nécessiter une mise à jour.
bridge.js : rattachement des éléments du site aux identifiants d’exemplaires.site-theme.js, site-theme.css : qualification des composants natifs et thème global graphite/vert.site-pages.css : navigation, pages, paramètres, listes et écrans publics.achievements.js : réclamation native des succès, synchronisation entre onglets et reprises automatiques.pack-opening.js, pack-opening.css : interception du paquet normal, requête d’ouverture unique, scène 3D (paquet et pile en volume), sons et récapitulatif.market.js, market-ui.js, market-ui.css : enrichissement du marché et commandes de session.market-worker.js, market-policy.js, market-api.js : coordination des enchères, budget persistant et adaptateur de l’API native.late-bid-worker.js, late-bid-policy.js : programmations par enchère, fenêtre de dernière minute, plafond, suivi des prolongations et autorisation avant chaque mise.pack-cards.js : lecture de la réponse /api/packs/open et liste des raretés.pack-art-globe.svg, card-back-globe.svg : paquet globe et dos de ses cartes (générés par scripts/pack-art-globe.mjs : un globe orthographique aux continents stylisés, découpé en pièces de puzzle sur la sphère). Ne pas les modifier à la main.pack-art-green.svg, card-back-green.svg : paquet vert et dos de ses cartes (générés par scripts/pack-art-green.mjs, qui partage ses outils de dessin avec le paquet puzzle dans scripts/pack-art-kit.mjs ; le lettrage vient de scripts/pack-green-glyphs.json, produit par scripts/glyphs.py --gpos avec Rubik Black). Ne pas les modifier à la main.pack-art-puzzle.svg, card-back-puzzle.svg, pack-art.svg, pack-fold.js : paquet puzzle et dos de ses cartes (générés par scripts/pack-art-puzzle.mjs, ne pas les modifier à la main), paquet sombre et cornure aléatoire (dont la couleur du rabat vient du visuel).lab/pack-opening.html : labo avec des réponses simulées, de la carte commune à la double légendaire. On le sert avec un serveur statique sans cache depuis la racine. Aucun paquet n’est consommé. Les exemplaires ont de vrais UUID et lab/collection-mock.html joue le rôle de la page Collection du site (recherche, pagination, étoile sur chaque ligne, fiche qui s’ouvre au clic) pour exercer les favoris et la fiche du récapitulatif. Cette maquette ne prouve rien sur le vrai DOM du site.api.js : collection paginée, échanges, moyennes de ventes et défausse.network.js : espacement et pause réseau partagés entre onglets, classification des pannes et contrôle final avant les actions.content.js : cycle de vie, affichage et actions.controls.js : sliders à validation en fin de geste et boutons d’aide.help.js, help.css : aides contextuelles chargées à la demande.duplicates.js, duplicates.css : index local des doublons par identifiant de carte, piles par rareté, recherche et tri sur toute la collection. Réutilise la lecture existante, sans requête API supplémentaire ; rendu par tranches de 48 piles et illustrations chargées à la demande.prices.js : cache persistant, file partagée et traitement des refus d’accès.discard.js : sélection protégée, constitution des lots et validation des résultats.protection.js : normalisation et recherche des mots protégés.ui.js, ui.css, integration.css : interface isolée, thèmes du site et animations réduites selon les préférences système.Marque WikiRemastered. Le logo (extension/logo-wikiremastered.svg, affiché à la place du mot « WikiMasters » du site ; dans le menu, sa version compacte logo-wikiremastered-compact.svg, l’icône et le nom sur deux lignes) et l’icône (extension/icon-*.png) sont produits par node scripts/brand.mjs puis sh scripts/brand-png.sh. Les lettres viennent de Rubik Black, converties en tracés par scripts/glyphs.py (fontTools) dans scripts/brand-glyphs.json. La fiche Chrome Web Store (textes, confidentialité, images) est dans store/ ; python3 scripts/package.py produit aussi le ZIP à téléverser.
La référence visuelle est un guide de design des composants interne (guide-design-composants.md, non publié). DESIGN.md en décrit l’application à cette extension.
Lecture des ressources et des réponses réelles du site effectuée. Les contrôles critiques des lots et de la file de prix utilisent des réponses simulées. La réclamation native en arrière-plan de « Sélection personnelle » a été confirmée : +25 wikibidous. Aucune carte n’a été défaussée pendant le développement ; aucune validation visuelle automatisée n’a été exécutée.
L’expérience d’ouverture a été vérifiée dans le labo, pour chaque rareté, le shiny, la double légendaire, les erreurs, le clavier et la sécurité du bouton de paquet suivant. Un paquet réel a été ouvert par le flux natif pour relever le format de réponse. L’extension elle-même n’a pas encore été chargée dans un navigateur connecté.