Langue des énigmes à revoir :
Au 3e signalement d'un compte différent, la définition est éliminée d'office : elle sort du jeu, et le script du lundi la retire des fichiers. « Remettre en jeu » annule une fausse alerte, « Éliminer » n'attend pas le 3e signalement. Chaque décision clôt les signalements.
Une ligne par changement, courte, au présent. Pas de phrase : « correction de l'affichage du record dans le calendrier », pas « j'ai corrigé un bug où… ».
La version est le numéro de build iOS (11, 12, 13…). Pour ce qui ne part que sur le site, écrire « après 13 » — le site avance entre deux builds, et il faut pouvoir le distinguer.
« À signaler à Apple » marque ce qui touche ce que l'examinateur a déjà vu : une permission demandée, une donnée collectée ou déclarée, un achat, du contenu nouveau servi depuis la base, un texte des pages légales. C'est le seul vrai devoir — les notes de l'examen doivent rester vraies. Le reste (affichage, corrections, réglages) ne se déclare pas.
Entrée valide la ligne. La version reste en place pour enchaîner plusieurs lignes du même build.
Groupé par version, la plus récente en tête. Chaque ligne porte le jour et l'heure ; celles qui sont marquées ressortent en doré avec un drapeau.
Aucune ligne ne s'efface depuis cette page : un journal qu'on peut réécrire ne prouve rien, et c'est de preuve qu'on a besoin le jour où il faut dire à Apple ce qui a changé depuis l'examen. Une erreur se corrige à la main en base (sql/41).
« Copier les lignes à signaler » met dans le presse-papiers les seules lignes marquées, groupées par build, prêtes à coller dans les notes de la prochaine soumission.
Cinq sources en une seule liste : les énigmes gagnées par les comptes, chaque énigme lancée (avec ou sans compte), les énigmes gagnées sans compte, les créations de compte, et le journal d'authentification de Supabase — connexions, déconnexions, mots de passe oubliés, comptes modifiés ou supprimés.
« Invités » ramasse tout ce que fait quelqu'un sans compte. Aujourd'hui, ce sont les énigmes qu'il lance : la langue, le titre, le thème et le mode, sans rien qui dise qui. C'est ce que le jeu enregistre depuis toujours, et ce que la page de confidentialité annonce déjà.
Les renouvellements de jeton sont écartés : ils arrivent à chaque ouverture de l'application et noieraient tout le reste.
Le comptage des victoires sans compte est ÉTEINT par défaut : il s'allume dans les réglages à distance (clé « journalInvites »), et pas avant que les pages de confidentialité aient été réécrites — elles disent aujourd'hui qu'aucun score n'est enregistré sans compte.
Une victoire sans compte s'inscrit sans aucun identifiant — ni compte, ni appareil, ni adresse IP. Deux parties du même invité sont donc indistinguables de deux invités différents : on sait ce qui se joue sans compte, on ne suit personne.
Ce projet Supabase est partagé avec LittlePebbles : les comptes et le journal d'authentification sont communs, et une connexion ne dit pas de quelle application elle vient. Les 2 150 comptes semés pour les tests, reconnaissables à leur adresse en « @pebblehunt.test », sont masqués par défaut ; la case les ramène. Attention, le champ « role » de la fiche ne sert à rien ici : Mimi et Clins valent « dummy » comme les comptes semés.
Chaque en-tête trie : un clic sur « Quand », « Quoi », « Qui », « Détail » ou « Points » range le tableau, un second clic retourne le sens. Les lignes sans points (une connexion, un compte créé) restent en bas dans les deux sens — les faire remonter n'apprendrait rien.
Sous chaque en-tête, un menu déroulant ne filtre que sa colonne : les jours, les genres, les joueurs, les détails — et des seuils pour les points, parce qu'une roue de trois cents scores ne se choisit pas. Chaque menu ne propose que ce à quoi il mène : choisir un joueur restreint le menu des énigmes aux siennes. Un menu posé devient bleu.
La recherche du haut, elle, cherche dans tout à la fois. Les deux se cumulent, et le bouton « Vider les filtres de colonne » ne paraît que s'il y a quelque chose à vider.
Chaque ligne qui porte une énigme porte le drapeau de sa langue, en tête du détail. Le drapeau est hors du texte : trier « Détail » range donc par énigme, pas par langue — pour ranger par langue, il y a le menu « Langue » en haut.
Les heures sont celles du téléphone. Le CSV porte les deux : l'heure d'ici et l'heure universelle, pour qu'un tableur ou un autre fuseau retombe sur ses pieds.
Comptes qui ont lancé ou gagné une énigme
Comptes Wordlocus créés chaque jour
Parties lancées et gagnées sans compte, chaque jour ; aucun identifiant, un invité qui joue deux fois compte deux fois
Joueurs différents de chaque jeu, jour par jour (un joueur peut compter dans plusieurs jeux)
Par jour et par jeu, invités compris
Parties gagnées sur parties lancées, sur la période
Parties lancées par module, et leur rythme jour après jour
Pages vues chaque jour ; un jour à zéro saute aux yeux
Total des pages d'énigmes en ligne, toutes langues (une page par défi passé, publiée la nuit suivante)
Chaque ligne nouvelle du journal part en notification — sur les appareils abonnés ici (« Recevoir sur cet appareil », même jeu fermé) et sur Telegram tant qu'il reste coché — avec le même détail, jamais l'adresse e-mail, jamais l'IP, jamais les jetons révoqués, jamais les comptes de test. Toucher la notification ouvre ce journal. Décochez ce que vous ne voulez pas recevoir : c'est pris en compte en moins d'une minute.
Les notifications WordLocus passent par la PWA (l'icône posée sur l'écran d'accueil) : Android, et iPhone depuis iOS 16.4 si la PWA est installée. Pas encore dans l'application des stores.
| Canal | Actif |
|---|
| Événement | Envoyer |
|---|
| Information | Montrer |
|---|
Refaites chaque nuit à 00 h 30 : une page d'accueil par langue, une page par énigme passée (sans date ni solution), une liste par langue. Chaque visite est comptée sans cookie ni identifiant ; les robots et cet appareil (l'admin) ne comptent pas. Ce que Google montre dans ses résultats se lit dans Search Console.
Énigmes passées Page d'accueil Search Console
Crédite ou débite le compte connecté, sans passer par le bonus quotidien. Réservé à l'admin (sql/30) : personne d'autre ne peut appeler cette fonction, et le solde ne descend jamais sous zéro.
Crédite ou débite le joueur dont vous donnez le pseudonyme (la casse n'a pas d'importance). Un nombre négatif débite ; le solde ne descend jamais sous zéro, et la série du bonus quotidien n'est pas touchée. Réservé à l'admin (sql/36).
Donne à un autre compte tout ce que vous pouvez faire ici : modérer, régler le jeu à distance, créditer des jetons — et promouvoir quelqu'un à son tour. Ce n'est pas un droit à donner à la légère. Votre compte, lui, ne peut jamais être retiré. Réservé à l'admin (sql/38).
Cochez les groupes qui voient chaque jeu. « Public » l'ouvre à tout le monde. Un changement vaut tout de suite, sans nouvelle version.
Admin : les comptes de l'onglet « Droits » (et vous). Public : tout le monde. UAT et Bêta se gèrent ici.
La règle générale, puis les exceptions par jeu. Les montants viennent des réglages en cours.
| Situation | Tous les jeux, en général | Site / PWA | App Android | App iPhone |
|---|---|---|---|---|
| Qui voit quel jeu | Les groupes cochés dans Admin › Joueurs › « Accès aux modules » : Admin (onglet Droits et vous), UAT, Bêta, Public (tout le monde). La liste des groupes du joueur se garde sur l'appareil (hors ligne compris). | Pareil partout. | ||
| Hors ligne : jouer | On joue ce qui est déjà sur l'appareil : le pool hors ligne (3 niveaux), et pour les Mots croisés les 2 grilles neuves gardées à la connexion et les grilles commencées. Les cartes bêta restent visibles (liste gardée). | Seulement si le site a déjà été ouvert une fois (cache du navigateur). | Le pool hors ligne est dans l'app (figé à la version publiée). | |
| Hors ligne : défi du jour | Indisponible : il vient de la base. | Pareil partout. | ||
| Hors ligne : score | Le mot dans la grille : compté si le compte a vu le réseau il y a moins de 7 jours et a ses jetons (payé à crédit), sinon partie libre non comptée. Mot à mot, Mots entrelacés, Mots croisés : la victoire est mise de côté et envoyée au retour du réseau ; la carte de fin le dit. | Pareil partout. | ||
| Hors ligne : aides payantes | Le mot dans la grille : à crédit (débité au retour). Mots croisés : impossibles (« Les aides des Mots croisés demandent Internet »). | Pareil partout. | ||
| Sans assez de jetons | On propose une vidéo qui rapporte jetons, puis l'achat se fait aussitôt. Message : « Vous n'avez plus assez de jetons : regardez une vidéo pour continuer ▶️ ». | Pas de vidéo sur le web, et plus de jetons offerts (réglage « jetonsSansVideoWeb », éteint) : un pop-up « Plus assez de jetons » : regarder une vidéo dans l'app ou attendre le bonus quotidien, avec les boutons App Store et Google Play (ce dernier ouvre le pop-up du test fermé). La roue des jetons reste. | Vidéo AdMob ; si la régie n'a rien à servir, les jetons sont offerts (réglage « jetonsSansVideo »). | Vidéo AdMob ; même filet. |
| Mises à jour | Énigmes, grilles de Mots croisés et réglages : en direct, sans nouvelle version. | Le code et les dictionnaires aussi, à la mise en ligne. | Le code, les dictionnaires et le pool hors ligne : seulement avec une nouvelle version du store. | |
| Jeu | Ce qui se paie | Aides | Score | Particularités |
|---|---|---|---|---|
| Le mot dans la grille | « Par thème » et « par difficulté » : lots de 3 énigmes à jetons (ou vidéo). Mélange : jeton. | Refondre la casse, indice : 3 coups chacun. | Coups restants × points, multiplicateur de niveau. | Mode libre (non compté) hors des conditions ci-dessus. |
| Mot à mot | Une partie neuve : le prix d'une énigme (3 jetons, réglage prixEnigme) ; libre hors ligne et sans compte. | Ampoule : 3 coups. | Coups restants × points, + mots encore cachés. | Hors ligne : pool hors ligne seulement. |
| Mots entrelacés | Une partie neuve : le prix d'une énigme (3 jetons) ; reprendre est gratuit ; libre hors ligne et sans compte. | Ampoule : 5 lettres pour 3 coups. | Coups restants × points. | Grille fabriquée sur l'appareil à partir du texte de l'énigme. |
| Mots croisés | Une grille neuve : jetons, une gratuite par jour (reprendre une grille commencée est gratuit). | Ampoule : 5 lettres pour jetons ; œil (mots justes) : jetons, une fois par grille. Payées sans attendre, annulées si la base refuse. | Titre trouvé + rapidité, + bonus grille complète, + 1 point par lettre juste trouvée (ampoule exclue). | Grilles servies par le site (croises/jtd-<langue>.json), une partie gardée par grille. |
Ajoute « TEST VIDE » à la liste « Par spécialité », sur cet appareil et pour l'admin seulement : une catégorie sans aucune énigme servable. La toucher doit dire qu'il n'y a plus d'énigme, sans retirer un seul jeton.
Joue les vidéos du bac à sable de Google au lieu des vraies : c'est le seul moyen de voir une vidéo tant que l'app n'est pas publiée. Réservé à vos comptes, sur cet appareil.
Affiche en haut de l'écran chaque étape d'une vidéo (consentement, chargement, erreur). Pour comprendre un échec sur un vrai iPhone. Touchez le journal pour le fermer.
Ce que le jeu relit à chaque ouverture (sql/35) : un bandeau, un thème, les nombres de l'économie. Chaque appareil garde le dernier état connu — en mode avion il joue avec — et une clé vide rend sa valeur d'usine au jeu. Les bornes sont vérifiées ici avant l'envoi, et le jeu les revérifie de son côté : une valeur qu'il ne comprend pas est ignorée, jamais appliquée de travers.
Une case = langue × thème × niveau. « Reste » : ce que le joueur le plus vorace n'a pas encore joué. L'extinction suit son rythme des 14 derniers jours. Le défi du jour ne compte pas (il puise dans les énigmes datées).
Afficher
Le prompt de la fournée, par ordre d'urgence :
Langue :
xxxxxxx =
xxxxxxx +
xxxxxxx ~
xxxxxxxpanteon ≈
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx