Skip to content

Releases

v3.24 — campagnes auto-jeu dans le Labo, base d'un reseau de neurones en ombre

Choose a tag to compare

@github-actions github-actions released this 09 Nov 17:41
7be89c5

Auto-jeu : la base de positions d'un réseau de neurones « en ombre »

  • Nouveau type de campagne dans le Labo (🌐 Réseau, administration) :
    auto-jeu. Un réglage de l'IA joue contre lui-même, chaque partie avec sa
    propre graine, donc sa propre ouverture de 8 demi-coups tirée au hasard. Les
    parties sont distribuées aux exécutants (navigateurs, PC, conteneurs) et
    vérifiées par recalcul comme les duels. Le bilan affiche les parties et les
    positions produites, et le partage Noirs / nulles / Blancs.
  • Côté serveur (abalassembly-api) : type: 'autojeu' sur POST /ordo/campagnes
    (migration 009), et scripts/exporter-positions.js, qui rejoue chaque partie
    acceptée dans le moteur et écrit une ligne par position (plateau en 61 cases,
    camp au trait, billes sorties, score du juge actuel, résultat final vu du
    camp au trait, ouverture marquée), en NDJSON ou CSV. Testé jusque dans le
    conteneur Docker.
  • C'est la première étape du réseau de neurones « en ombre » : il tournera à
    côté du juge actuel, sans le remplacer, pour comparer les deux. Le moteur qui
    joue ne change pas.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.23 — bandeau de langue en bas, marges du haut, filtre du Musee

Choose a tag to compare

@github-actions github-actions released this 09 Nov 00:05
097b1d8

Bande vide en haut des pages, bandeau de langue, filtre du Musée

  • Bandeau de langue (« View Abalassembly in English? ») : il s'affichait en
    haut, sous la barre fixe du haut, donc invisible, tout en poussant chaque
    page de sa hauteur. Pour tout navigateur qui n'est pas en français, une bande
    vide au-dessus du titre, et une proposition de langue que personne ne voyait.
    Il s'affiche maintenant en bas de l'écran.
  • Téléphone : plusieurs pages (Analyse, Éditeur, Gym, Labo…) gardaient la
    marge de la barre du haut de l'ordinateur (64 px) en plus de celle du
    téléphone (56 px) ; la page Photo aussi. Le titre remonte de 50 à 110 px selon
    la page et la langue du navigateur ; rien ne passe sous la barre.
  • Ordinateur : l'accueil, l'Aide et la vue d'exercice du Gym Cerveau
    commençaient sous la barre fixe du haut (haut des tuiles, titre « Aide »
    et bouton « ← Tous les exercices » cachés). Ils démarrent maintenant sous la
    barre. Vérifié sur les 36 pages à 1280, 1000 et 390 px de large.
  • Musée : les sept boutons de filtre (Luxe, Bois, Voyage…) appelaient une
    fonction qui n'avait jamais existé. Le filtre existe maintenant, et les
    boutons ne s'affichent que s'il y a des pièces à filtrer : la page n'en a pas
    encore, elle dit honnêtement « en cours de préparation ».

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.22 — plus aucun code dans le HTML, CSP sans unsafe-inline

Choose a tag to compare

@github-actions github-actions released this 08 Nov 21:11
12f9f13

Plus aucun code dans le HTML : la CSP protège vraiment

  • Les 1 011 gestionnaires écrits dans le HTML (onclick, onchange,
    oninput, onkeydown, onmouseover/onmouseout, ontoggle), dans les pages
    comme dans le HTML que le JavaScript fabrique, sont remplacés par des attributs
    de données : data-click="showPage('gym')", data-change, data-input,
    data-keydown, data-toggle, plus data-entree (touche Entrée),
    data-fond (clic sur le fond d'une fenêtre) et data-survol (style le temps du
    survol). Le navigateur ne les exécute jamais : un seul écouteur
    (src/main/00a-actions.js) les lit, n'appelle que les 460 fonctions de la
    liste des actions du site (tools/actions.js), et n'accepte comme arguments
    que des valeurs simples. Le clic remonte les éléments comme avant.
  • CSP : script-src n'a plus 'unsafe-inline'. Les six blocs de script du
    fichier y sont nommés par leur empreinte SHA-256, recalculée à chaque
    assemblage. Un script glissé dans la page par un pseudo, un fichier ou un
    message ne s'exécuterait pas, même si un échappement était oublié. Les fils
    de calcul (IA, Labo, réseau de calcul) restent autorisés.
  • Rien ne change pour le joueur. Vérifié dans Chromium avec la nouvelle CSP : les
    36 pages sans gestionnaire en ligne ni violation de la CSP, et un parcours
    (menu, Gym Cerveau, partie contre l'IA qui joue, Analyse, réglages, survol,
    fenêtres, Labo et son fil de calcul).
  • Tests : plus aucun gestionnaire en ligne dans les sources, empreintes exactes,
    liste des actions à jour, interpréteur qui refuse tout ce qui n'est pas une
    valeur simple. CONTRIBUTING et SECURITY expliquent la règle.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.21 — polices hebergees (plus de Google Fonts), telephone, accessibilite

Choose a tag to compare

@github-actions github-actions released this 08 Nov 18:50
838449c

Plus de Google Fonts, téléphone et accessibilité

  • Polices hébergées par le site : Playfair Display, DM Sans et DM Mono sont
    embarquées dans le fichier (fonts/, licence SIL OFL 1.1, tools/polices.js),
    comme les polices de la page Écosystème. Avant, chaque visite appelait Google
    Fonts, qui recevait l'adresse IP de chaque visiteur, contrairement à ce que
    disait la politique de confidentialité ; et hors ligne, le site retombait sur
    des polices de secours. Le site n'appelle plus aucun autre site à l'ouverture
    (vérifié dans un navigateur), et la CSP n'autorise plus Google.
  • Politique de confidentialité : la liste exacte des autres sites que deux
    fonctions peuvent appeler (import Excel, partie en direct sur PlayStrategy),
    et le fait que le site ne calcule aucune empreinte de l'appareil.
  • Téléphone : les plateaux d'Analyse et de l'Éditeur sortaient à moitié de
    l'écran (540 et 500 px sur 390) ; ils retrécissent maintenant. La page Photo
    gardait sa colonne de 520 px à côté du texte : une règle écrite plus bas
    écrasait celle du téléphone. Mêmes marges corrigées sur l'accueil. Les 36
    pages tiennent dans un écran de 390 px.
  • Accessibilité : 25 champs, 5 interrupteurs et 1 image avaient leur
    étiquette à l'écran mais pas pour les lecteurs d'écran ; boutons et liens du
    pied de page plus hauts au doigt (24 px au moins).

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.20 — Gym Cerveau, l'exercice sur sa propre vue, lance par Demarrer

Choose a tag to compare

@github-actions github-actions released this 08 Nov 17:27
90941f7

Gym Cerveau : l'exercice sur sa propre vue, lancé par « Démarrer »

  • « Commencer » ouvre l'exercice à la place de la liste, sur sa propre vue
    (avant : un panneau à droite, ou sous la liste sur téléphone), avec son titre,
    sa zone, sa consigne et le choix du niveau.
  • L'exercice ne part qu'au clic sur ▶ Démarrer : la position à mémoriser, le
    chronomètre et les flashs n'avancent plus pendant qu'on lit la consigne ou
    qu'on choisit le niveau. Changer de niveau remet le bouton Démarrer ; Rejouer
    repart tout de suite.
  • « ← Tous les exercices » revient à la liste ; le Retour du navigateur ou du
    téléphone aussi (adresse #gym-exercice). Quitter la page arrête l'exercice.
  • Le Duel Cerveau garde son décompte commun de 3 secondes : ses manches partent
    sans bouton, sur la même vue, et son bandeau reste affiché pendant le duel.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.19 — protection anti-robot du serveur, sans service tiers

Choose a tag to compare

@github-actions github-actions released this 08 Nov 13:54
56ed3bc

Protection anti-robot du serveur, sans service tiers

  • Preuve de travail (le « captcha » d'Abalassembly) : le serveur donne un
    défi signé, l'appareil cherche une réponse par SHA-256 — environ 0,3 s sur un
    ordinateur, une seconde sur un téléphone, rien à cliquer. Aucun script d'un
    autre site, aucun cookie : le calcul tient dans le fichier du jeu, qui reste
    utilisable hors ligne. Demandée à l'inscription, et à la connexion seulement
    après trois mots de passe faux pour ce compte : un joueur normal ne la voit
    jamais. La connexion du Labo (réseau de calcul) en profite aussi.
  • Côté serveur (abalassembly-api) : limites propres à la connexion (10 par
    minute) et à l'inscription (5 par heure), IPv6 comptée par bloc /64,
    blocage d'un compte 15 minutes après dix mots de passe faux (les sessions
    ouvertes continuent), même temps de réponse pour un email inconnu.
  • Tant que le serveur n'est pas en ligne, rien ne part de l'appareil (testé).
  • Politique de confidentialité : une phrase sur cette protection.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.18 — reseau de calcul -- parties du Labo verifiables, executant navigateur

Choose a tag to compare

@github-actions github-actions released this 06 Nov 22:02
99a56d0

Réseau de calcul : un ordonnanceur, des exécutants branchables

  • Parties du Labo reproductibles. À profondeur fixe, une partie se refait
    maintenant coup pour coup, dans n'importe quel fil et sur n'importe quel
    appareil :
    • les clés de hachage du moteur sortent d'une graine fixe (avant,
      Math.random, d'autres clés dans chaque fil) ;
    • le plateau est remis dans l'ordre des cases avant chaque recherche. Avant,
      l'ordre des billes en mémoire, bousculé par les recherches précédentes,
      changeait l'ordre des coups générés, donc le choix entre deux coups de même
      note : un coup recalculé seul différait du coup joué (trouvé en
      recalculant).
      Vérifié sur 116 demi-coups recalculés un à un, jusqu'à la profondeur 3.
      La force du jeu ne change pas.
  • Vérification d'une partie rendue : le fil de calcul sait rejouer une
    partie imposée et rechercher lui-même les demi-coups demandés. Il signale un
    coup différent du sien, un coup illégal, une ouverture qui ne vient pas de la
    graine, une partie inachevée ou des coups joués après la fin.
  • Onglet 🌐 Réseau de calcul du Labo :
    • se connecter au serveur de calcul, choisir le nombre de cœurs prêtés,
      brancher ou débrancher ;
    • pour l'administrateur : les interrupteurs (une famille d'exécutants, un
      exécutant) et la création de campagnes (deux jeux de poids, une
      profondeur, des paires).
      Tant que le serveur n'est pas en ligne, l'onglet le dit et rien ne part
      de l'appareil.
  • Le serveur (abalassembly-api, /ordo) tient la file des missions et les
    baux, choisit l'exécutant selon sa vitesse mesurée, et vérifie chaque
    partie. Un exécutant Node permet de brancher un PC en ligne de commande.
  • Page Calcul distribué réécrite : ce qui a
    changé depuis l'étude qui l'écartait, et ce qui reste exclu.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.17 — l'arbre de recherche dessine dans l'Observatoire IA

Choose a tag to compare

@github-actions github-actions released this 06 Nov 15:01
0ca6457

Observatoire IA — l'arbre de recherche dessiné

D'après les maquettes envoyées par ocj94 :

  • Un vrai arbre, en haut de l'onglet Recherche et en vue simplifiée dans
    la Vue générale : la position, ses meilleurs coups de départ en cases
    notées, et sous chacun la chaîne de la suite que l'IA prévoit (la pastille
    noire ou blanche dit qui joue). Il remplace la liste « Arbre des lignes
    principales » ; les 10 lignes restent listées au niveau Développeur.
  • Il se remplit pendant le calcul. Les coups sont classés selon la
    dernière profondeur terminée. Une pastille dit où en est chacun à la
    profondeur en cours : en cours (jaune), noté (bleu, avec sa nouvelle note),
    pas encore noté (gris, il garde sa note précédente). « p4 » dit de quelle
    profondeur vient la note affichée.
  • Vue simplifiée (3 coups, 2 étages) ou complète (5 coups, toute la
    suite), au choix et retenue. Toucher un coup le choisit ; après le coup,
    toucher une case de la suite montre le plateau à cette étape.
  • Ce qui n'y est pas, parce que ce serait inventé : plusieurs réponses
    notées sous un coup (le moteur ne garde que celle qu'il prévoit) et une case
    « élaguée » (aucun coup de départ n'est élagué).
  • Pour la suite en direct, le message « profondeur terminée » du moteur
    emporte maintenant la suite prévue de ses 10 meilleurs coups. Elle était
    déjà calculée à ce moment-là : un test vérifie que le moteur joue le même
    coup, avec les mêmes positions examinées.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.16 — bibliotheques verifiees, SheetJS isole, versions verifiables

Choose a tag to compare

@github-actions github-actions released this 05 Nov 22:20
d70bcfa

Sécurité — bibliothèques vérifiées, SheetJS isolé, versions vérifiables

Suite de l'analyse de sécurité (référentiel SSDF du NIST) :

  • Bibliothèques des CDN vérifiées octet pour octet. Three.js (la 3D) et
    SheetJS (le lecteur de tableur) ne s'exécutent qu'après comparaison de leur
    empreinte SHA-384 avec celle du paquet npm officiel. Un fichier différent est
    refusé, et un message le dit. cdnjs est retiré des sources, car il sert sa
    propre copie. La copie locale de Three.js est identique au paquet npm.
  • SheetJS 0.18.5 isolé. Deux failles connues sur des fichiers piégés
    (CVE-2023-30533, pollution de prototype ; CVE-2024-22363, expression
    régulière qui s'emballe). Les versions corrigées ne sont plus sur npm. Le
    tableur est donc lu dans un fil de calcul jetable, qui ne renvoie que des
    lignes de texte et qui est arrêté au bout de 20 s. Aucun code de SheetJS ne
    s'exécute dans la page. Vérifié dans un vrai navigateur : un bon fichier se
    lit, et un fichier de bibliothèque falsifié est refusé sans s'exécuter.
  • Politique de sécurité du contenu resserrée. Les CDN ne peuvent plus
    servir de script (script-src 'self' 'unsafe-inline' blob:). Ils sont
    seulement lus (connect-src), et seul le contenu vérifié s'exécute. La page
    Architecture le dit.
  • Versions vérifiables. Chaque nouvelle release joint index.html, la
    copie de Three.js et leurs empreintes SHA-256 (SHA256SUMS). SECURITY.md
    explique comment vérifier.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer

🔐 Empreintes SHA-256 des fichiers joints : SHA256SUMS (vérifier avec sha256sum -c SHA256SUMS).

v3.15 — l'Observatoire IA dans la colonne de droite, plus en fenetre

Choose a tag to compare

@github-actions github-actions released this 05 Nov 21:39
2112ea6

Changé — l'Observatoire IA dans la colonne de droite

Demande de l'auteur : « toute la partie Observatoire IA dans la sidebar de
droite et non dans une fenêtre ». L'Observatoire est maintenant un onglet de la
colonne de droite de la partie, « 🔭 Observatoire IA », à côté de Partie,
Liste, Commentaires, Chat, Analyse et Bots (le bouton de l'onglet Partie y
mène aussi).

  • Sur ordinateur, il est à côté du plateau ; la colonne passe de 320 à 420 px
    tant qu'il est ouvert, sur les écrans d'au moins 1 700 px (en dessous, le
    plateau n'aurait plus la place).
  • Sur téléphone, il est sous le plateau, comme les autres onglets : plus de
    tiroir sur le bas de l'écran.
  • Changer d'onglet le ferme ; ✕ ramène à l'onglet Partie ; le site se
    souvient de l'onglet ouvert. Les boutons de fenêtre (— réduire, ⤢ plein
    écran) disparaissent.

Corrigé — le plateau passait sous les colonnes

  • De 901 à environ 1 500 px de large, le plateau gardait 640 px même quand la
    colonne centrale était plus étroite : il passait sous les deux colonnes
    (mesuré à 1 280 px : 90 px cachés de chaque côté, bouton plein écran
    compris). Il rétrécit maintenant à la largeur de la colonne.
  • Sur téléphone, une ligne qui ne se coupe pas (une ligne de mesures, un
    tableau) pouvait élargir toute la page au-delà de l'écran (mesuré : 419 px
    sur un écran de 390). La colonne ne dépasse plus l'écran ; un tableau trop
    large défile dans l'Observatoire.

🇫🇷 Journal complet · 🇬🇧 English changelog · 🎮 Jouer