diff --git a/AGENTS.md b/AGENTS.md index 5a8784c..e9822cf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,11 +17,12 @@ Tout le contenu est **en français**. Rédigez en français (documentation, micr | `outils/` | Outils en Rust, un binaire par commande : `build_adr` génère `adr.html` et contient aussi `XREFS`, les renvois de chaque ADR vers les pages ; `plan_financier` calcule les tableaux du plan financier ; `check_identity` contrôle l'identité visuelle. | | `docs/index.html` | Accueil du dossier de direction. | | `docs/identite.html`, `design-system.html`, `typographie.html`, `mouvement.html` | Identité visuelle et design système. | -| `docs/interfaces.html`, `maquettes.html` | Inventaire des 34 interfaces de la PWA et les maquettes statiques de 27 d’entre elles et de I-30 à I-34, mobile et ordinateur (styles dans `docs/assets/maquettes.css`, préfixe `mq-`). | +| `docs/interfaces.html`, `maquettes.html` | Inventaire des 35 interfaces de la PWA et les maquettes statiques de 27 d’entre elles et de I-30 à I-35, mobile et ordinateur (styles dans `docs/assets/maquettes.css`, préfixe `mq-`). | | `docs/jeu.html`, `plis.html`, `codex.html` | Démonstrations jouables (table de fusion, plis, codex). | | `docs/boussole.html`, `moodboard.html` | Piliers, à cultiver / à éviter, ambiance. | | `docs/logo.html` | Page de travail hors navigation : les dix pistes de logo, dont le sceau ÉL retenu (ADR 0021). | | `docs/cartes-visuels.html` | Page de travail hors navigation : dix pistes de texture pour les cartes du codex, dont la piste 02 (aplat découpé) retenue par l’ADR 0023. Les silhouettes du codex sont dans `cardArt` (`assets/etymo.js`). | +| `docs/pistes-retention.html` | Page de travail hors navigation : quatre pistes pour dynamiser la partie et la faire durer (mémoire des essais, quêtes de collection, constellation, enquêtes en cours), chacune avec sa démo, sur des mots de Rosette et Argile extraits du dépôt Content (légendaires exclues). Retenues par le propriétaire, elles sont consignées dans les ADR 0080 à 0083 (proposés). | | `docs/assets/etymo.css` | **Jetons de référence** (couleurs, polices, rayons, easing) et styles partagés. | | `docs/assets/etymo.js` | Démo partagée (réserve, découvertes, plis) stockée dans `localStorage` (`etymologique.demo.v1`, thème `etymologique.theme`). | | `docs/assets/logo.svg` | Icône des pages : le sceau ÉL (ADR 0021). | diff --git a/docs/adr.html b/docs/adr.html index 028f40a..b417f5e 100644 --- a/docs/adr.html +++ b/docs/adr.html @@ -29,7 +29,7 @@

Les Architecture Decision Records consignent chaque décision structurante : son contexte, les options écartées et ses conséquences. Chaque ADR renvoie aux pages où la décision se voit.

Voir aussiLe modèle de donnéesLa boussolePrincipes d’expérienceVision du jeu (Markdown)

-
ADR 0001Accepté · modifié depuisSource Markdown

PWA responsive comme plateforme MVP

  • Statut : Accepté, partiellement remplacé par l'ADR 0033 : un toucher sur une brique la pose directement, sans sélection ni « Ajouter à la table ». Partiellement remplacé aussi par l'ADR 0041 : hors connexion, consultation seule, sans préparation de fusion ni tentative conservée
  • Portée : MVP
+
ADR 0001Accepté · modifié depuisSource Markdown

PWA responsive comme plateforme MVP

  • Statut : Accepté, partiellement remplacé par l'ADR 0033 : un toucher sur une brique la pose directement, sans sélection ni « Ajouter à la table ». Partiellement remplacé aussi par l'ADR 0041 : hors connexion, consultation seule, sans préparation de fusion ni tentative conservée
  • Portée : MVP

Contexte

ÉtymoLogique doit tester rapidement une interaction de manipulation utilisable au toucher comme à la souris. Le produit vise des sessions courtes, mais le codex et les explications bénéficient aussi d'un grand écran. Maintenir plusieurs applications natives retarderait la validation du cœur ludique.

Décision

@@ -828,7 +828,7 @@

Positives

Négatives

  • Deux dépôts à tenir, et un épinglage de version à suivre à chaque évolution du format.
  • Le jeu d’essai doit rester assez riche pour couvrir toutes les validations.
  • Les fascicules en préparation sont lisibles sur GitHub : la découverte d’un fascicule peut être gâchée avant sa parution.
  • Un fork peut reprendre le catalogue sous CC BY-SA 4.0, mais pas le nom ni le logo (ADR 0017).
  • Le contenu ne reçoit pas de contributions publiques directes : une proposition passe par une issue, puis par une saisie dans le dépôt du catalogue.

Critères de réévaluation

-
  • Une règle de jeu ou une validation apparaît dans la CI du dépôt du catalogue : la déplacer dans le dépôt public.
  • Des contributeurs veulent proposer du contenu directement : étudier un circuit de contribution qui ne dévoile rien.
  • Le contenu d’un fascicule fuite depuis le dépôt du catalogue : revoir ses accès et ses secrets.

En situationSources et fascicules, éditées dans le dépôt privéLe schéma, public

ADR 0027Proposé · modifié depuisSource Markdown

Catalogue statique par fascicules, recettes publiques, serveur qui fait foi

  • Statut : Proposé, partiellement remplacé par l'ADR 0029 : un fascicule à venir attend sous staging/, illisible, jusqu'à sa promotion dans public/ ; le reste reste en vigueur
  • Remplace partiellement :
    • ADR 0003, pour le secret des recettes verrouillées ;
    • ADR 0024, pour les deux artefacts (public et serveur), la projection du contenu par joueur et le bucket privé du catalogue ;
    • ADR 0025, pour la correspondance entre cartes et médias, tenue dans l'artefact serveur ;
    • ADR 0026, pour la règle qui n'envoie jamais les recettes au client.
  • Précise : ADR 0015 (le secret des légendaires tient à l'interface, pas aux fichiers)
  • Complète : ADR 0005 (forme de l'artefact), ADR 0007 (données du joueur), ADR 0010 (ce qui n'est jamais stocké)
+
  • Une règle de jeu ou une validation apparaît dans la CI du dépôt du catalogue : la déplacer dans le dépôt public.
  • Des contributeurs veulent proposer du contenu directement : étudier un circuit de contribution qui ne dévoile rien.
  • Le contenu d’un fascicule fuite depuis le dépôt du catalogue : revoir ses accès et ses secrets.

En situationSources et fascicules, éditées dans le dépôt privéLe schéma, public

ADR 0027Proposé · modifié depuisSource Markdown

Catalogue statique par fascicules, recettes publiques, serveur qui fait foi

  • Statut : Proposé, partiellement remplacé par l'ADR 0029 : un fascicule à venir attend sous staging/, illisible, jusqu'à sa promotion dans public/ ; et par l'ADR 0081 : la paire d'un échec ou d'un « presque » est gardée jusqu'à la parution suivante. Le reste reste en vigueur
  • Remplace partiellement :
    • ADR 0003, pour le secret des recettes verrouillées ;
    • ADR 0024, pour les deux artefacts (public et serveur), la projection du contenu par joueur et le bucket privé du catalogue ;
    • ADR 0025, pour la correspondance entre cartes et médias, tenue dans l'artefact serveur ;
    • ADR 0026, pour la règle qui n'envoie jamais les recettes au client.
  • Précise : ADR 0015 (le secret des légendaires tient à l'interface, pas aux fichiers)
  • Complète : ADR 0005 (forme de l'artefact), ADR 0007 (données du joueur), ADR 0010 (ce qui n'est jamais stocké)

Contexte

L'ADR 0024 compile deux artefacts : un public, presque vide, et un serveur, qui contient tout le reste. Le client ne reçoit que la projection calculée pour chaque joueur. L'ADR 0025 garde dans l'artefact serveur le lien entre une carte et sa silhouette, et l'ADR 0026 refuse d'envoyer une recette au client.

Ce montage protège un secret fragile. La fiche d'un mot découvert donne déjà sa composition, donc sa recette. Une recette encore inconnue se partage en une phrase sur un forum. Pour ce secret, le serveur doit pourtant :

@@ -2141,7 +2141,108 @@

Positives

Négatives

  • Un texte de plus à rédiger et à relire pour chaque mot concerné.
  • Un onglet de plus au verso, donc une navigation de plus à tenir au clavier.

Critères de réévaluation

-
  • Les joueurs n’ouvrent pas l’onglet : fondre les exemples dans « Formes » ou les retirer de l’affichage, pas du catalogue.
  • Des exemples par image ou par audio deviennent souhaitables : nouvel ADR sur les médias.

En situationCarte agrandie

+
  • Les joueurs n’ouvrent pas l’onglet : fondre les exemples dans « Formes » ou les retirer de l’affichage, pas du catalogue.
  • Des exemples par image ou par audio deviennent souhaitables : nouvel ADR sur les médias.

En situationCarte agrandie

ADR 0080ProposéSource Markdown

Enquêtes en cours : un indice acheté reste lisible

  • Statut : Proposé
  • Portée : écran de la table (I-09) et feuille des indices (I-12) de la PWA
  • Complète : ADR 0051 (indices à la carte), qui ne dit pas où se relit un indice déjà payé
+

Contexte

+

L’ADR 0051 vend trois indices par carte à trouver : silhouette, définition, sens littéral. La feuille des indices ne montre qu’une carte à la fois, celle que l’App juge la plus utile. Dès qu’elle passe à une autre carte, ce qui a été acheté pour la première ne se lit plus nulle part : jusqu’à 28 gouttes perdues de vue par carte.

+

L’ADR 0038 promettait qu’« un niveau acquis reste lisible ». L’ADR 0051 ne le redit pas et l’App ne le garantit plus. Le besoin a été retenu par le propriétaire sur la page de travail pistes de rétention.

+

Décision

+

Une enquête

+
  • Une enquête est une carte à trouver dont le joueur a acheté au moins un indice. Elle dure jusqu’à la découverte du mot.
  • Une enquête ne dépend pas de la réserve : elle reste visible même quand le mot ne peut plus se former avec les briques du joueur.
+

Où elle se lit

+
  • Sous la table de fusion, un panneau « Enquêtes en cours » liste les enquêtes par numéro de carte croissant, une ligne repliée par enquête : « N° 003 · Silhouette, définition », avec en aperçu le dernier texte acheté.
  • Dépliée, une enquête montre la silhouette, la définition et le sens littéral achetés, et rien d’autre.
  • Au-delà de trois enquêtes, les suivantes se déplient d’un bouton.
  • Le panneau ne vend rien : la feuille des indices reste le seul endroit où l’on achète.
+

Ce qui ne se voit jamais

+
  • Ni le mot, ni ses lettres, ni ses briques, ni sa langue, ni sa rareté, ni s’il se forme avec la réserve (ADR 0051).
  • Jamais un mot légendaire (ADR 0043), jamais une carte d’un fascicule verrouillé (ADR 0069).
+

Sans règle nouvelle

+

La PWA relit les indices obtenus que le serveur envoie déjà dans l’état. Aucune table, aucune commande, aucun contrat ne change.

+

Options envisagées

+

Rouvrir la feuille des indices sur une carte choisie

+

Un sélecteur de carte dans la feuille. Écartée : il faudrait choisir parmi des silhouettes, donc montrer la liste des cartes à trouver, ce que l’ADR 0051 évite.

+

Montrer les enquêtes en tête de la feuille de réserve

+

Elles seraient sous les yeux au moment de choisir les briques. Écartée pour l’instant : la modale de réserve porte déjà la petite table, la consigne et les filtres. À reprendre si le panneau sous la table ne suffit pas.

+

Relire les indices dans le codex

+

Sur la carte en silhouette. Écartée : le joueur cherche quand il est à la table, pas dans le codex, et la carte en silhouette ne doit rien montrer gratuitement.

+

Conséquences

+

Positives

+
  • Un indice payé ne se perd plus : la promesse de l’ADR 0038 est tenue, sans règle nouvelle.
  • Le joueur a des pistes en cours à poursuivre d’une séance à l’autre.
+

Négatives

+
  • Un panneau de plus sur l’écran de la table, qui allonge la page sur mobile.
+

Critères de réévaluation

+
  • Le panneau reste replié ou ignoré : le déplacer dans la feuille de réserve.
  • Les joueurs accumulent plus de dix enquêtes : regrouper par fascicule.

En situationTable de fusion et enquêtesIndicesLa démo

ADR 0081ProposéSource Markdown

Mémoire des essais : les briques déjà essayées passent en fin de réserve

  • Statut : Proposé
  • Remplace partiellement : ADR 0027, pour la phrase « les propositions de fusion ne sont jamais stockées » : un échec ou un « presque » se note désormais, sans issue ni date, jusqu’à la parution suivante. Le reste de l’ADR 0027 reste en vigueur.
  • Complète : ADR 0010 (ce qui est stocké), ADR 0033 (réserve et table)
+

Contexte

+

Se tromper ne coûte rien, mais rien ne garde la trace des essais déjà faits. Rosette compte 96 paires possibles pour 47 mots, Routes des mots 450 paires pour 96 mots. Passé une vingtaine de briques, le joueur oublie ses échecs et refait les mêmes essais en boucle. Le besoin a été retenu par le propriétaire sur la page de travail pistes de rétention, avec l’oubli à chaque parution.

+

Or l’ADR 0027 et le modèle de données disent que les propositions de fusion ne sont jamais stockées. Une mémoire tenue par le seul appareil ne suivrait ni un compte sur un autre appareil (ADR 0070) ni une réinstallation.

+

Décision

+

Ce que voit le joueur

+
  • Dès qu’une brique est posée sur la table et qu’une case reste libre, la réserve range en fin de liste les briques déjà essayées avec elle, dans cet ordre de cases, sous l’intertitre « Déjà essayées avec géo- · 3 ».
  • Leur ligne de sens dit pourquoi : « aucune recette », « presque : inversez » ou « au codex ».
  • Le gris : fond Sable, libellé en Encre secondaire, sans ombre. Une brique grisée reste jouable : ce n’est ni l’état désactivé ni l’état épuisé.
  • Une paire jamais essayée ne bouge pas : les autres briques gardent l’ordre habituel, sans tri ni compteur. Retirer la brique ou en poser une autre recalcule la liste ; les briques glissent vers leur place en 240 ms, sans animation en mouvement réduit.
+

Ce que garde le serveur

+
  • Une table essai : le joueur, la brique de gauche, la brique de droite, et le dernier fascicule paru au moment de l’essai. Ni issue, ni date, ni texte du catalogue.
  • Le serveur l’écrit dans la transaction de la commande fusion, pour un échec ou un « presque » seulement, et seulement si le joueur connaît les deux briques. Sans ligne commande ni changement de version_etat : rejoué, l’essai ne fait rien.
  • 3 000 lignes au plus par joueur ; au-delà, un essai n’est plus noté.
  • Un mot déjà au codex n’a besoin d’aucune ligne : le client le déduit de la règle de fusion.
  • L’état du joueur porte la liste des paires. La trace suit le compte sur tous ses appareils, entre dans l’export et part avec la partie.
+

L’oubli à chaque parution

+

À la parution d’un fascicule, toutes les lignes jugées sous un fascicule plus ancien s’oublient en bloc : elles ne se lisent plus, et la prochaine écriture les efface. De vieilles paires peuvent devenir des mots : 31 recettes de Routes des mots réunissent deux briques déjà parues. Une purge paire par paire désignerait les familles que prolonge le nouveau fascicule.

+

Options envisagées

+

Une mémoire locale à l’appareil

+

Aucune donnée de plus côté serveur. Écartée : elle se perd à la réinstallation et ne suit pas un compte sur un autre appareil.

+

Garder l’issue et la date de chaque essai

+

Elles serviraient la télémétrie. Écartée : rien dans l’affichage ne les demande, et l’ADR 0010 limite ce qui est gardé à ce qui sert le joueur.

+

La réserve en tableau préfixes × suffixes, ou une annonce « déjà tentée »

+

Première version de la piste. Écartée par le propriétaire : un tableau devient illisible passé une vingtaine de briques, et une annonce après coup n’évite pas l’essai.

+

Oublier paire par paire les seules paires devenues des mots

+

Moins d’oubli. Écartée : l’oubli ciblé désignerait les familles du nouveau fascicule.

+

Conséquences

+

Positives

+
  • Le joueur ne refait plus les mêmes essais, sans que rien ne lui révèle une paire qu’il n’a pas essayée.
  • La trace est tenue par le serveur, comme le reste de la partie.
+

Négatives

+
  • Une table de plus, jusqu’à 3 000 lignes par joueur.
  • À chaque parution, les essais déjà faits redeviennent neutres.
+

Critères de réévaluation

+
  • La mesure « tentatives avant une découverte » ne baisse pas : revoir la présentation.
  • Des joueurs atteignent le plafond : le relever ou oublier les plus anciennes.

En situationRéserve et mémoire des essaisLa démo

ADR 0082ProposéSource Markdown

Quêtes de collection par fascicule

  • Statut : Proposé
  • Complète : ADR 0045 (une condition fermée de plus, au niveau du fascicule), ADR 0042 (un bloc de plus dans l’onglet « Fascicules »)
+

Contexte

+

Une fois ses jalons atteints, rien ne pousse le joueur à terminer un fascicule. Il lui faut un objectif lisible et fini : « tous les préfixes », « tous les suffixes », « tous les mots communs ». Une quête « ligne du codex complétée » a été écartée, car la ligne dépend de la largeur de l’écran.

+

Le besoin initial parlait de « toutes les cartes de difficulté X ». Or la difficulté n’est jamais affichée (ADR 0047), et les fascicules parus n’ont que 0 à 2 mots difficiles. La rareté des mots, elle, est affichée (ADR 0040) et donne des quêtes jouables : de 19 à 56 mots communs, de 14 à 37 peu communs, 3 ou 4 rares quand un fascicule en a assez. Le propriétaire a retenu la rareté.

+

Décision

+

Cinq critères, une liste fermée

+
CritèreMembresRécompense par défaut
Tous les préfixesles préfixes du fascicule, reprises comprises20 gouttes d’encre, 1 sablier
Tous les suffixesles suffixes du fascicule, reprises comprises20 gouttes d’encre, 1 sablier
Tous les mots communsses mots résultats de rareté commune20 gouttes d’encre
Tous les mots peu communsses mots de rareté peu commune30 gouttes d’encre, 1 sablier
Tous les mots raresses mots de rareté rare40 gouttes d’encre, 1 sablier
+
  • Un fascicule déclare ses quêtes de collection dans le catalogue, chacune avec un identifiant de palier, son critère et sa récompense. Un critère au plus une fois par fascicule.
  • Les membres se calculent à la compilation : jamais une brique légendaire, jamais un mot légendaire ni un mot qui en exige une (ADR 0043). Une quête de moins de 3 membres n’est pas déclarée.
  • La rareté d’un mot est celle de l’ADR 0040 : la plus haute rareté des briques de sa recette la plus accessible.
+

Progression et récompense

+
  • Le serveur compte les membres au codex du joueur et ne renvoie que les quêtes des fascicules débloqués : un fascicule verrouillé n’expose aucun total (ADR 0069).
  • Une quête complète attend que le joueur la récupère, comme un palier (ADR 0042, ADR 0045) : une commande idempotente, une seule fois, refusée tant que la quête est incomplète ou le fascicule verrouillé.
  • Aucune liste des cartes manquantes : la quête dit combien, jamais lesquelles.
+

Affichage

+

Dans l’onglet « Fascicules » de la page Quêtes, un bloc « Collection » sous les jalons de chaque fascicule débloqué : l’intitulé, « 4 / 6 », la jauge et la récompense annoncée d’avance. Une quête à récupérer compte dans la pastille de l’onglet.

+

Options envisagées

+

Toutes les cartes d’une difficulté

+

Demandé au départ. Écartée : la difficulté n’est jamais affichée (ADR 0047), et elle serait presque vide.

+

Une ligne du codex complétée

+

Écartée : la ligne dépend de la largeur de l’écran.

+

Calculer les membres dans l’App

+

Pas de champ de plus dans le catalogue. Écartée : la règle de rareté et l’exclusion des légendaires vivraient en deux endroits, et le validateur ne pourrait pas refuser une quête trop petite.

+

Conséquences

+

Positives

+
  • Un objectif fini par fascicule, compréhensible sans explication.
  • Aucune table nouvelle : la récupération réutilise celle des paliers.
+

Négatives

+
  • Les mots rares avancent lentement, puisqu’il faut plusieurs exemplaires d’une même brique rare : les récompenses sont à simuler avant de publier.
  • Trois quêtes trop petites sont écartées des fascicules actuels : mots rares de Rosette et de Boustrophédon, mots communs d’Ogham.
+

Critères de réévaluation

+
  • Une quête n’est presque jamais terminée : revoir sa récompense ou la retirer.
  • Les joueurs demandent la liste des manquantes : à trancher contre l’ADR 0051, qui vend les indices.

En situationLa démoPage Quêtes

ADR 0083ProposéSource Markdown

Vue Réseau du codex : la constellation en deux rives

  • Statut : Proposé
  • Portée : codex de la PWA (I-14), nouvelle vue « Réseau »
  • Complète : ADR 0015 (codex et légendaires), ADR 0034 (vue dans l’adresse)
+

Contexte

+

Le codex montre des cartes isolées : le joueur ne voit pas que géo- a donné trois mots, ni que -logie en relie cinq. La vue Familles liste les mots d’une brique, pas les liens entre familles. Le propriétaire a retenu une vue en réseau, à condition qu’elle reste lisible, sans chevauchement, et qu’elle ne bouge pas à chaque découverte (pistes de rétention).

+

Deux prototypes ont été mesurés sur les fascicules 1 à 6. Un graphe à forces déplaçait 27 briques sur 30 à chaque découverte (48 px en médiane) et devenait un écheveau au-delà de 5 fascicules sur ordinateur, 3 sur mobile. Une disposition en deux rives n’avait aucun chevauchement et ne déplaçait une brique que pour faire place à une nouvelle.

+

Décision

+

Deux rives

+
  • À gauche, les briques trouvées de la 1ʳᵉ case des recettes ; à droite, celles de la 2ᵉ. Chaque mot trouvé est une courbe qui traverse la « rivière » entre ses deux briques.
  • Une bande par fascicule débloqué, dans l’ordre de parution ; dans chaque bande, les briques par ordre alphabétique, une rangée de 44 px chacune. La rangée entière est la cible tactile.
  • Les courbes partent et arrivent à l’horizontale : elles ne passent jamais sous une brique ni sous un texte.
  • La dernière découverte est tracée en Corail ; sous chaque brique, une barre Rosée donne la progression de sa famille.
  • La largeur des rives dépend de toutes les briques du réseau, jamais de la seule vue : une brique nouvelle ne déplace rien en largeur, et seulement en hauteur les briques qui la suivent dans l’alphabet.
+

Aides

+
  • La vue s’ouvre sur le dernier fascicule débloqué qui a au moins un mot trouvé ; un sélecteur passe d’un fascicule à l’autre ou à « Tous ».
  • Dans « Tous », une courbe de plus de 640 px de haut devient deux antennes chiffrées (« ↓3 »), sauf pour la famille suivie et la dernière découverte.
  • Toucher une brique suit sa famille dans un panneau collé en bas de l’écran : ses mots trouvés, qui ouvrent leur carte, et leurs briques partenaires, qui font suivre leur propre famille.
  • Une liste en repli dit la même chose en texte ; elle sert aussi aux lecteurs d’écran.
  • Une brique qui s’insère apparaît, celles qui changent de rangée glissent en 240 ms ; rien en mouvement réduit.
+

Garde-fous

+
  • Seules les briques et les mots trouvés apparaissent : jamais une case pour une brique à trouver (ADR 0051). L’ordre alphabétique ne dit rien des recettes.
  • Jamais une légendaire (ADR 0043), jamais un fascicule verrouillé ; les totaux des familles ne comptent que les fascicules débloqués (ADR 0069). Une légendaire trouvée recevra plus tard une bande à part : hors périmètre.
  • La disposition se calcule dans la PWA, sur la projection du codex ; aucune donnée ni règle nouvelle côté serveur. La vue entre dans l’adresse (vue=reseau, ADR 0034).
+

Options envisagées

+

Un graphe à forces

+

Plus organique. Écartée : il déplaçait 27 briques sur 30 à chaque découverte et devenait illisible au-delà de quelques fascicules.

+

Une matrice préfixes × suffixes

+

Aucune courbe. Écartée : une case par paire possible montrerait la place des mots à trouver, et la matrice devient immense.

+

Un arbre par brique

+

Lisible pour une famille. Écartée : il ne montre pas les liens entre familles, ce que la vue Familles fait déjà.

+

Conséquences

+

Positives

+
  • Le joueur voit son vocabulaire comme un réseau qui grandit, sans qu’une découverte ne bouscule ce qu’il connaît.
  • Une fonction pure et déterministe : même codex, même dessin, facile à tester.
+

Négatives

+
  • Une vue de plus à maintenir, en SVG, avec sa liste en repli.
  • Sur mobile, la rivière est étroite : les longues briques réduisent la place des courbes.
+

Critères de réévaluation

+
  • La vue est peu ouverte : la retirer ou la fondre dans Familles.
  • Au-delà de dix fascicules, la vue « Tous » devient trop haute : n’afficher que les fascicules choisis.

En situationVue RéseauEn situation

diff --git a/docs/adr/0027-catalogue-statique-et-donnees-joueur.md b/docs/adr/0027-catalogue-statique-et-donnees-joueur.md index bfaa13c..51773f2 100644 --- a/docs/adr/0027-catalogue-statique-et-donnees-joueur.md +++ b/docs/adr/0027-catalogue-statique-et-donnees-joueur.md @@ -1,6 +1,6 @@ # ADR 0027 — Catalogue statique par fascicules, recettes publiques, serveur qui fait foi -- **Statut** : Proposé, partiellement remplacé par l'[ADR 0029](0029-parution-par-promotion-de-prefixe.md) : un fascicule à venir attend sous `staging/`, illisible, jusqu'à sa promotion dans `public/` ; le reste reste en vigueur +- **Statut** : Proposé, partiellement remplacé par l'[ADR 0029](0029-parution-par-promotion-de-prefixe.md) : un fascicule à venir attend sous `staging/`, illisible, jusqu'à sa promotion dans `public/` ; et par l'[ADR 0081](0081-memoire-des-essais.md) : la paire d'un échec ou d'un « presque » est gardée jusqu'à la parution suivante. Le reste reste en vigueur - **Remplace partiellement** : - [ADR 0003](0003-recettes-de-fusion.md), pour le secret des recettes verrouillées ; - [ADR 0024](0024-architecture-logicielle-et-hebergement.md), pour les deux artefacts (public et serveur), la projection du contenu par joueur et le bucket privé du catalogue ; diff --git a/docs/adr/0080-enquetes-en-cours.md b/docs/adr/0080-enquetes-en-cours.md new file mode 100644 index 0000000..08d6811 --- /dev/null +++ b/docs/adr/0080-enquetes-en-cours.md @@ -0,0 +1,64 @@ +# ADR 0080 — Enquêtes en cours : un indice acheté reste lisible + +- **Statut** : Proposé +- **Portée** : écran de la table (I-09) et feuille des indices (I-12) de la PWA +- **Complète** : [ADR 0051](0051-indices-a-la-carte.md) (indices à la carte), qui ne dit pas où se relit un indice déjà payé + +## Contexte + +L’[ADR 0051](0051-indices-a-la-carte.md) vend trois indices par carte à trouver : silhouette, définition, sens littéral. La feuille des indices ne montre qu’une carte à la fois, celle que l’App juge la plus utile. Dès qu’elle passe à une autre carte, ce qui a été acheté pour la première ne se lit plus nulle part : jusqu’à 28 gouttes perdues de vue par carte. + +L’[ADR 0038](0038-indices-a-prix-croissant-et-format-des-jalons.md) promettait qu’« un niveau acquis reste lisible ». L’ADR 0051 ne le redit pas et l’App ne le garantit plus. Le besoin a été retenu par le propriétaire sur la page de travail [pistes de rétention](../pistes-retention.html#enquetes-titre). + +## Décision + +### Une enquête + +- Une **enquête** est une carte à trouver dont le joueur a acheté au moins un indice. Elle dure jusqu’à la découverte du mot. +- Une enquête ne dépend pas de la réserve : elle reste visible même quand le mot ne peut plus se former avec les briques du joueur. + +### Où elle se lit + +- Sous la table de fusion, un panneau « Enquêtes en cours » liste les enquêtes par numéro de carte croissant, une ligne repliée par enquête : « N° 003 · Silhouette, définition », avec en aperçu le dernier texte acheté. +- Dépliée, une enquête montre la silhouette, la définition et le sens littéral **achetés**, et rien d’autre. +- Au-delà de trois enquêtes, les suivantes se déplient d’un bouton. +- Le panneau ne vend rien : la feuille des indices reste le seul endroit où l’on achète. + +### Ce qui ne se voit jamais + +- Ni le mot, ni ses lettres, ni ses briques, ni sa langue, ni sa rareté, ni s’il se forme avec la réserve ([ADR 0051](0051-indices-a-la-carte.md)). +- Jamais un mot légendaire ([ADR 0043](0043-legendaires-chance-fixe-hors-garanties-et-secretes.md)), jamais une carte d’un fascicule verrouillé ([ADR 0069](0069-deblocage-progressif-des-fascicules.md)). + +### Sans règle nouvelle + +La PWA relit les indices obtenus que le serveur envoie déjà dans l’état. Aucune table, aucune commande, aucun contrat ne change. + +## Options envisagées + +### Rouvrir la feuille des indices sur une carte choisie + +Un sélecteur de carte dans la feuille. Écartée : il faudrait choisir parmi des silhouettes, donc montrer la liste des cartes à trouver, ce que l’ADR 0051 évite. + +### Montrer les enquêtes en tête de la feuille de réserve + +Elles seraient sous les yeux au moment de choisir les briques. Écartée pour l’instant : la modale de réserve porte déjà la petite table, la consigne et les filtres. À reprendre si le panneau sous la table ne suffit pas. + +### Relire les indices dans le codex + +Sur la carte en silhouette. Écartée : le joueur cherche quand il est à la table, pas dans le codex, et la carte en silhouette ne doit rien montrer gratuitement. + +## Conséquences + +### Positives + +- Un indice payé ne se perd plus : la promesse de l’ADR 0038 est tenue, sans règle nouvelle. +- Le joueur a des pistes en cours à poursuivre d’une séance à l’autre. + +### Négatives + +- Un panneau de plus sur l’écran de la table, qui allonge la page sur mobile. + +## Critères de réévaluation + +- Le panneau reste replié ou ignoré : le déplacer dans la feuille de réserve. +- Les joueurs accumulent plus de dix enquêtes : regrouper par fascicule. diff --git a/docs/adr/0081-memoire-des-essais.md b/docs/adr/0081-memoire-des-essais.md new file mode 100644 index 0000000..e72d7f7 --- /dev/null +++ b/docs/adr/0081-memoire-des-essais.md @@ -0,0 +1,67 @@ +# ADR 0081 — Mémoire des essais : les briques déjà essayées passent en fin de réserve + +- **Statut** : Proposé +- **Remplace partiellement** : [ADR 0027](0027-catalogue-statique-et-donnees-joueur.md), pour la phrase « les propositions de fusion ne sont jamais stockées » : un échec ou un « presque » se note désormais, sans issue ni date, jusqu’à la parution suivante. Le reste de l’ADR 0027 reste en vigueur. +- **Complète** : [ADR 0010](0010-observabilite-et-vie-privee.md) (ce qui est stocké), [ADR 0033](0033-gestes-de-la-table-de-fusion.md) (réserve et table) + +## Contexte + +Se tromper ne coûte rien, mais rien ne garde la trace des essais déjà faits. Rosette compte 96 paires possibles pour 47 mots, Routes des mots 450 paires pour 96 mots. Passé une vingtaine de briques, le joueur oublie ses échecs et refait les mêmes essais en boucle. Le besoin a été retenu par le propriétaire sur la page de travail [pistes de rétention](../pistes-retention.html#memoire-titre), avec l’oubli à chaque parution. + +Or l’ADR 0027 et le [modèle de données](../modele-donnees.md#7-données-du-joueur) disent que les propositions de fusion ne sont jamais stockées. Une mémoire tenue par le seul appareil ne suivrait ni un compte sur un autre appareil ([ADR 0070](0070-comptes-facultatifs-par-lien-et-code-e-mail.md)) ni une réinstallation. + +## Décision + +### Ce que voit le joueur + +- Dès qu’une brique est posée sur la table et qu’une case reste libre, la réserve range en fin de liste les briques déjà essayées **avec elle, dans cet ordre de cases**, sous l’intertitre « Déjà essayées avec géo- · 3 ». +- Leur ligne de sens dit pourquoi : « aucune recette », « presque : inversez » ou « au codex ». +- Le gris : fond Sable, libellé en Encre secondaire, sans ombre. Une brique grisée **reste jouable** : ce n’est ni l’état désactivé ni l’état épuisé. +- Une paire jamais essayée ne bouge pas : les autres briques gardent l’ordre habituel, sans tri ni compteur. Retirer la brique ou en poser une autre recalcule la liste ; les briques glissent vers leur place en 240 ms, sans animation en mouvement réduit. + +### Ce que garde le serveur + +- Une table `essai` : le joueur, la brique de gauche, la brique de droite, et le dernier fascicule paru au moment de l’essai. **Ni issue, ni date, ni texte du catalogue.** +- Le serveur l’écrit dans la transaction de la commande `fusion`, pour un échec ou un « presque » seulement, et seulement si le joueur connaît les deux briques. Sans ligne `commande` ni changement de `version_etat` : rejoué, l’essai ne fait rien. +- **3 000 lignes au plus** par joueur ; au-delà, un essai n’est plus noté. +- Un mot déjà au codex n’a besoin d’aucune ligne : le client le déduit de la règle de fusion. +- L’état du joueur porte la liste des paires. La trace suit le compte sur tous ses appareils, entre dans l’export et part avec la partie. + +### L’oubli à chaque parution + +À la parution d’un fascicule, **toutes** les lignes jugées sous un fascicule plus ancien s’oublient en bloc : elles ne se lisent plus, et la prochaine écriture les efface. De vieilles paires peuvent devenir des mots : 31 recettes de Routes des mots réunissent deux briques déjà parues. Une purge paire par paire désignerait les familles que prolonge le nouveau fascicule. + +## Options envisagées + +### Une mémoire locale à l’appareil + +Aucune donnée de plus côté serveur. Écartée : elle se perd à la réinstallation et ne suit pas un compte sur un autre appareil. + +### Garder l’issue et la date de chaque essai + +Elles serviraient la télémétrie. Écartée : rien dans l’affichage ne les demande, et l’ADR 0010 limite ce qui est gardé à ce qui sert le joueur. + +### La réserve en tableau préfixes × suffixes, ou une annonce « déjà tentée » + +Première version de la piste. Écartée par le propriétaire : un tableau devient illisible passé une vingtaine de briques, et une annonce après coup n’évite pas l’essai. + +### Oublier paire par paire les seules paires devenues des mots + +Moins d’oubli. Écartée : l’oubli ciblé désignerait les familles du nouveau fascicule. + +## Conséquences + +### Positives + +- Le joueur ne refait plus les mêmes essais, sans que rien ne lui révèle une paire qu’il n’a pas essayée. +- La trace est tenue par le serveur, comme le reste de la partie. + +### Négatives + +- Une table de plus, jusqu’à 3 000 lignes par joueur. +- À chaque parution, les essais déjà faits redeviennent neutres. + +## Critères de réévaluation + +- La mesure « tentatives avant une découverte » ne baisse pas : revoir la présentation. +- Des joueurs atteignent le plafond : le relever ou oublier les plus anciennes. diff --git a/docs/adr/0082-quetes-de-collection-par-fascicule.md b/docs/adr/0082-quetes-de-collection-par-fascicule.md new file mode 100644 index 0000000..c21bdb5 --- /dev/null +++ b/docs/adr/0082-quetes-de-collection-par-fascicule.md @@ -0,0 +1,67 @@ +# ADR 0082 — Quêtes de collection par fascicule + +- **Statut** : Proposé +- **Complète** : [ADR 0045](0045-quetes-du-jour-carte-de-lecteur-et-quetes-au-long-cours.md) (une condition fermée de plus, au niveau du fascicule), [ADR 0042](0042-page-quetes-et-recompenses-a-recuperer.md) (un bloc de plus dans l’onglet « Fascicules ») + +## Contexte + +Une fois ses jalons atteints, rien ne pousse le joueur à **terminer** un fascicule. Il lui faut un objectif lisible et fini : « tous les préfixes », « tous les suffixes », « tous les mots communs ». Une quête « ligne du codex complétée » a été écartée, car la ligne dépend de la largeur de l’écran. + +Le besoin initial parlait de « toutes les cartes de difficulté X ». Or la difficulté n’est jamais affichée ([ADR 0047](0047-un-tiers-facile-un-tiers-moyen-un-tiers-difficile.md)), et les fascicules parus n’ont que 0 à 2 mots difficiles. La rareté des mots, elle, est affichée ([ADR 0040](0040-rarete-des-mots.md)) et donne des quêtes jouables : de 19 à 56 mots communs, de 14 à 37 peu communs, 3 ou 4 rares quand un fascicule en a assez. Le propriétaire a retenu la rareté. + +## Décision + +### Cinq critères, une liste fermée + +| Critère | Membres | Récompense par défaut | +|---|---|---| +| Tous les préfixes | les préfixes du fascicule, reprises comprises | 20 gouttes d’encre, 1 sablier | +| Tous les suffixes | les suffixes du fascicule, reprises comprises | 20 gouttes d’encre, 1 sablier | +| Tous les mots communs | ses mots résultats de rareté commune | 20 gouttes d’encre | +| Tous les mots peu communs | ses mots de rareté peu commune | 30 gouttes d’encre, 1 sablier | +| Tous les mots rares | ses mots de rareté rare | 40 gouttes d’encre, 1 sablier | + +- Un fascicule déclare ses quêtes de collection dans le catalogue, chacune avec un identifiant de palier, son critère et sa récompense. Un critère au plus une fois par fascicule. +- Les **membres** se calculent à la compilation : jamais une brique légendaire, jamais un mot légendaire ni un mot qui en exige une ([ADR 0043](0043-legendaires-chance-fixe-hors-garanties-et-secretes.md)). Une quête de moins de **3 membres** n’est pas déclarée. +- La rareté d’un mot est celle de l’[ADR 0040](0040-rarete-des-mots.md) : la plus haute rareté des briques de sa recette la plus accessible. + +### Progression et récompense + +- Le serveur compte les membres au codex du joueur et ne renvoie que les quêtes des fascicules **débloqués** : un fascicule verrouillé n’expose aucun total ([ADR 0069](0069-deblocage-progressif-des-fascicules.md)). +- Une quête complète attend que le joueur la récupère, comme un palier ([ADR 0042](0042-page-quetes-et-recompenses-a-recuperer.md), [ADR 0045](0045-quetes-du-jour-carte-de-lecteur-et-quetes-au-long-cours.md)) : une commande idempotente, une seule fois, refusée tant que la quête est incomplète ou le fascicule verrouillé. +- Aucune liste des cartes manquantes : la quête dit combien, jamais lesquelles. + +### Affichage + +Dans l’onglet « Fascicules » de la page Quêtes, un bloc « Collection » sous les jalons de chaque fascicule débloqué : l’intitulé, « 4 / 6 », la jauge et la récompense annoncée d’avance. Une quête à récupérer compte dans la pastille de l’onglet. + +## Options envisagées + +### Toutes les cartes d’une difficulté + +Demandé au départ. Écartée : la difficulté n’est jamais affichée (ADR 0047), et elle serait presque vide. + +### Une ligne du codex complétée + +Écartée : la ligne dépend de la largeur de l’écran. + +### Calculer les membres dans l’App + +Pas de champ de plus dans le catalogue. Écartée : la règle de rareté et l’exclusion des légendaires vivraient en deux endroits, et le validateur ne pourrait pas refuser une quête trop petite. + +## Conséquences + +### Positives + +- Un objectif fini par fascicule, compréhensible sans explication. +- Aucune table nouvelle : la récupération réutilise celle des paliers. + +### Négatives + +- Les mots rares avancent lentement, puisqu’il faut plusieurs exemplaires d’une même brique rare : les récompenses sont à simuler avant de publier. +- Trois quêtes trop petites sont écartées des fascicules actuels : mots rares de Rosette et de Boustrophédon, mots communs d’Ogham. + +## Critères de réévaluation + +- Une quête n’est presque jamais terminée : revoir sa récompense ou la retirer. +- Les joueurs demandent la liste des manquantes : à trancher contre l’ADR 0051, qui vend les indices. diff --git a/docs/adr/0083-vue-reseau-du-codex.md b/docs/adr/0083-vue-reseau-du-codex.md new file mode 100644 index 0000000..e9f3769 --- /dev/null +++ b/docs/adr/0083-vue-reseau-du-codex.md @@ -0,0 +1,66 @@ +# ADR 0083 — Vue Réseau du codex : la constellation en deux rives + +- **Statut** : Proposé +- **Portée** : codex de la PWA (I-14), nouvelle vue « Réseau » +- **Complète** : [ADR 0015](0015-codex-fascicules-et-legendaires.md) (codex et légendaires), [ADR 0034](0034-ecran-dans-l-adresse.md) (vue dans l’adresse) + +## Contexte + +Le codex montre des cartes isolées : le joueur ne voit pas que *géo-* a donné trois mots, ni que *-logie* en relie cinq. La vue Familles liste les mots d’une brique, pas les liens entre familles. Le propriétaire a retenu une vue en réseau, à condition qu’elle reste lisible, sans chevauchement, et qu’elle ne bouge pas à chaque découverte ([pistes de rétention](../pistes-retention.html#constellation-titre)). + +Deux prototypes ont été mesurés sur les fascicules 1 à 6. Un graphe à forces déplaçait 27 briques sur 30 à chaque découverte (48 px en médiane) et devenait un écheveau au-delà de 5 fascicules sur ordinateur, 3 sur mobile. Une disposition en deux rives n’avait aucun chevauchement et ne déplaçait une brique que pour faire place à une nouvelle. + +## Décision + +### Deux rives + +- À gauche, les briques trouvées de la 1ʳᵉ case des recettes ; à droite, celles de la 2ᵉ. Chaque mot trouvé est une courbe qui traverse la « rivière » entre ses deux briques. +- Une **bande par fascicule débloqué**, dans l’ordre de parution ; dans chaque bande, les briques par **ordre alphabétique**, une rangée de **44 px** chacune. La rangée entière est la cible tactile. +- Les courbes partent et arrivent à l’horizontale : elles ne passent jamais sous une brique ni sous un texte. +- La dernière découverte est tracée en Corail ; sous chaque brique, une barre Rosée donne la progression de sa famille. +- La largeur des rives dépend de toutes les briques du réseau, jamais de la seule vue : une brique nouvelle ne déplace rien en largeur, et seulement en hauteur les briques qui la suivent dans l’alphabet. + +### Aides + +- La vue s’ouvre sur le dernier fascicule débloqué qui a au moins un mot trouvé ; un sélecteur passe d’un fascicule à l’autre ou à « Tous ». +- Dans « Tous », une courbe de plus de 640 px de haut devient deux **antennes** chiffrées (« ↓3 »), sauf pour la famille suivie et la dernière découverte. +- Toucher une brique suit sa famille dans un panneau collé en bas de l’écran : ses mots trouvés, qui ouvrent leur carte, et leurs briques partenaires, qui font suivre leur propre famille. +- Une **liste** en repli dit la même chose en texte ; elle sert aussi aux lecteurs d’écran. +- Une brique qui s’insère apparaît, celles qui changent de rangée glissent en 240 ms ; rien en mouvement réduit. + +### Garde-fous + +- Seules les briques et les mots trouvés apparaissent : jamais une case pour une brique à trouver ([ADR 0051](0051-indices-a-la-carte.md)). L’ordre alphabétique ne dit rien des recettes. +- Jamais une légendaire ([ADR 0043](0043-legendaires-chance-fixe-hors-garanties-et-secretes.md)), jamais un fascicule verrouillé ; les totaux des familles ne comptent que les fascicules débloqués ([ADR 0069](0069-deblocage-progressif-des-fascicules.md)). Une légendaire trouvée recevra plus tard une bande à part : hors périmètre. +- La disposition se calcule dans la PWA, sur la projection du codex ; aucune donnée ni règle nouvelle côté serveur. La vue entre dans l’adresse (`vue=reseau`, [ADR 0034](0034-ecran-dans-l-adresse.md)). + +## Options envisagées + +### Un graphe à forces + +Plus organique. Écartée : il déplaçait 27 briques sur 30 à chaque découverte et devenait illisible au-delà de quelques fascicules. + +### Une matrice préfixes × suffixes + +Aucune courbe. Écartée : une case par paire possible montrerait la place des mots à trouver, et la matrice devient immense. + +### Un arbre par brique + +Lisible pour une famille. Écartée : il ne montre pas les liens entre familles, ce que la vue Familles fait déjà. + +## Conséquences + +### Positives + +- Le joueur voit son vocabulaire comme un réseau qui grandit, sans qu’une découverte ne bouscule ce qu’il connaît. +- Une fonction pure et déterministe : même codex, même dessin, facile à tester. + +### Négatives + +- Une vue de plus à maintenir, en SVG, avec sa liste en repli. +- Sur mobile, la rivière est étroite : les longues briques réduisent la place des courbes. + +## Critères de réévaluation + +- La vue est peu ouverte : la retirer ou la fondre dans Familles. +- Au-delà de dix fascicules, la vue « Tous » devient trop haute : n’afficher que les fascicules choisis. diff --git a/docs/adr/README.md b/docs/adr/README.md index f7950c9..ebd8bfd 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -40,7 +40,7 @@ Une modification importante se fait dans un nouvel ADR. Les corrections factuell | [0024](0024-architecture-logicielle-et-hebergement.md) | Architecture serverless chez Scaleway, backend Rust, état relationnel | Accepté, publication des fascicules remplacée par 0025, contenu du dépôt du catalogue par 0026, artefacts et projection du contenu par 0027, préversion par branche par 0028, préparation hors connexion par 0041, profil invité par 0070 | | [0025](0025-medias-statiques-et-publication-programmee.md) | Médias du catalogue en statique, publication programmée des fascicules | Accepté, correspondance des médias remplacée par 0027, fichiers à venir et bascule par l'horloge de l'API par 0029 | | [0026](0026-depot-prive-du-catalogue-sans-logique.md) | Un dépôt public pour le catalogue brut, sans aucune logique | Accepté, recettes jamais envoyées au client remplacé par 0027 | -| [0027](0027-catalogue-statique-et-donnees-joueur.md) | Catalogue statique par fascicules, données du joueur sous autorité serveur | Proposé, dépôt à l'avance remplacé par 0029 | +| [0027](0027-catalogue-statique-et-donnees-joueur.md) | Catalogue statique par fascicules, données du joueur sous autorité serveur | Proposé, dépôt à l'avance remplacé par 0029, propositions de fusion jamais stockées par 0081 | | [0028](0028-gitflow-des-depots.md) | Gitflow des dépôts : master pour la prod, develop pour la hors-prod | Proposé | | [0029](0029-parution-par-promotion-de-prefixe.md) | Parution par promotion de préfixe, dans un seul bucket | Proposé, date du prochain fascicule publiée par 0049 | | [0030](0030-reserve-de-depart-par-fascicule.md) | Réserve de départ déclarée par chaque fascicule | Proposé, moment de l’octroi des graines remplacé par 0069 | @@ -87,6 +87,10 @@ Une modification importante se fait dans un nouvel ADR. Les corrections factuell | [0075](0075-moderation-des-pseudos-et-obligations-dsa.md) | Modération des pseudos et obligations du règlement sur les services numériques (DSA) | Proposé | | [0078](0078-soutien-par-dons-sur-ko-fi.md) | Soutien par dons sur Ko-fi, sans vente dans le jeu | Proposé | | [0079](0079-exemples-concrets-au-dos-des-cartes.md) | Exemples concrets au dos des cartes | Proposé | +| [0080](0080-enquetes-en-cours.md) | Enquêtes en cours : un indice acheté reste lisible | Proposé | +| [0081](0081-memoire-des-essais.md) | Mémoire des essais : les briques déjà essayées passent en fin de réserve | Proposé | +| [0082](0082-quetes-de-collection-par-fascicule.md) | Quêtes de collection par fascicule | Proposé | +| [0083](0083-vue-reseau-du-codex.md) | Vue Réseau du codex : la constellation en deux rives | Proposé | ## Page HTML diff --git a/docs/assets/maquettes.css b/docs/assets/maquettes.css index f260a1b..1b8f203 100644 --- a/docs/assets/maquettes.css +++ b/docs/assets/maquettes.css @@ -405,3 +405,33 @@ body.nocturne .mq-lang { color: var(--c-lang); } .mq-mail .mq-seal { justify-self: start; } .mq-code { padding: 10px; border: 1.5px dashed var(--line-strong); border-radius: 10px; color: var(--ink); font-family: var(--mono); font-size: 24px; font-weight: 700; letter-spacing: 0.16em; text-align: center; } .mq-mail small { color: var(--ink-3); font-size: 8.5px; line-height: 1.45; } + +/* Mémoire des essais (ADR 0081) : déjà essayée avec la brique de la table, grisée mais jouable. */ +.mq-brick.tried { border-color: var(--ink-3); background: var(--paper-2); box-shadow: none; color: var(--ink-2); } +.mq-sub { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding-top: 8px; border-top: 1px solid var(--line); color: var(--ink-2); font-family: var(--mono); font-size: 8px; letter-spacing: 0.08em; text-transform: uppercase; } +.mq-sub .mq-chip { letter-spacing: 0; text-transform: none; } + +/* Enquêtes en cours (ADR 0080) et silhouette achetée. */ +.mq-enq { display: grid; gap: 6px; padding: 7px 10px; border: 1.5px solid var(--line-strong); border-radius: 10px; background: var(--paper); font-size: 10.5px; } +.mq-enq.open { border-color: var(--fixed-ink); background: var(--cream); } +.mq-enq b { font-family: var(--mono); font-size: 9px; } +.mq-enq small { overflow: hidden; color: var(--ink-3); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; } +.mq-sil { display: block; width: 46px; aspect-ratio: 3 / 4; flex: none; border: 1.5px solid var(--fixed-ink); border-top-width: 8px; border-radius: 6px; background: radial-gradient(circle at 50% 62%, var(--line-strong) 0 30%, transparent 31%) var(--paper-2); opacity: 0.85; } + +/* Vue Réseau du codex (ADR 0083). */ +.mq-net { display: block; width: 100%; height: auto; flex: none; border: 1.5px solid var(--line); border-radius: 10px; background: var(--paper); } +.mq-net .filet { fill: none; stroke: var(--line-strong); stroke-opacity: 0.35; } +.mq-net .t { fill: var(--ink-2); font-family: var(--mono); font-size: 7.5px; font-weight: 700; } +.mq-net .lien { fill: none; stroke: var(--ink-3); stroke-width: 0.9; } +.mq-net .lien.pale { stroke: var(--line); } +.mq-net .lien.new { stroke: var(--c-action); stroke-width: 2.2; } +.mq-net .lien.fam { stroke: var(--ink); stroke-width: 2.2; } +.mq-net .ombre { fill: var(--pop-shadow); } +.mq-net .b { fill: var(--c-prefix); stroke: var(--fixed-ink); stroke-width: 1.2; } +.mq-net .b.s { fill: var(--c-suffix); } +.mq-net .b.sel { stroke-width: 2.4; } +.mq-net text { fill: var(--fixed-ink); font-family: var(--serif); font-size: 11px; font-weight: 700; } +.mq-net text.cpt { fill: var(--ink-2); font-family: var(--mono); font-size: 7.5px; font-weight: 400; } +.mq-net .rail { fill: var(--paper-2); stroke: var(--ink-3); stroke-width: 0.6; } +.mq-net .part { fill: var(--c-family); } +.mq-net .loin { opacity: 0.45; } diff --git a/docs/assets/pistes-retention/collection-aleph-verrouille-ordi.png b/docs/assets/pistes-retention/collection-aleph-verrouille-ordi.png new file mode 100644 index 0000000..08b35eb Binary files /dev/null and b/docs/assets/pistes-retention/collection-aleph-verrouille-ordi.png differ diff --git a/docs/assets/pistes-retention/collection-argile-ordi.png b/docs/assets/pistes-retention/collection-argile-ordi.png new file mode 100644 index 0000000..e6e81d0 Binary files /dev/null and b/docs/assets/pistes-retention/collection-argile-ordi.png differ diff --git a/docs/assets/pistes-retention/collection-recuperee-ordi.png b/docs/assets/pistes-retention/collection-recuperee-ordi.png new file mode 100644 index 0000000..930a8c7 Binary files /dev/null and b/docs/assets/pistes-retention/collection-recuperee-ordi.png differ diff --git a/docs/assets/pistes-retention/collection-rosette-complete-ordi.png b/docs/assets/pistes-retention/collection-rosette-complete-ordi.png new file mode 100644 index 0000000..9a000c2 Binary files /dev/null and b/docs/assets/pistes-retention/collection-rosette-complete-ordi.png differ diff --git a/docs/assets/pistes-retention/collection-rosette-mobile-nuit.png b/docs/assets/pistes-retention/collection-rosette-mobile-nuit.png new file mode 100644 index 0000000..fd684f0 Binary files /dev/null and b/docs/assets/pistes-retention/collection-rosette-mobile-nuit.png differ diff --git a/docs/assets/pistes-retention/collection-rosette-mobile.png b/docs/assets/pistes-retention/collection-rosette-mobile.png new file mode 100644 index 0000000..5f996b6 Binary files /dev/null and b/docs/assets/pistes-retention/collection-rosette-mobile.png differ diff --git a/docs/assets/pistes-retention/collection-rosette-ordi.png b/docs/assets/pistes-retention/collection-rosette-ordi.png new file mode 100644 index 0000000..efeff59 Binary files /dev/null and b/docs/assets/pistes-retention/collection-rosette-ordi.png differ diff --git a/docs/assets/pistes-retention/collection-variante-difficulte-ordi.png b/docs/assets/pistes-retention/collection-variante-difficulte-ordi.png new file mode 100644 index 0000000..5262713 Binary files /dev/null and b/docs/assets/pistes-retention/collection-variante-difficulte-ordi.png differ diff --git a/docs/assets/pistes-retention/constellation-ordinateur-tous.png b/docs/assets/pistes-retention/constellation-ordinateur-tous.png new file mode 100644 index 0000000..57ef912 Binary files /dev/null and b/docs/assets/pistes-retention/constellation-ordinateur-tous.png differ diff --git a/docs/assets/pistes-retention/constellation-ordinateur.png b/docs/assets/pistes-retention/constellation-ordinateur.png new file mode 100644 index 0000000..aea737e Binary files /dev/null and b/docs/assets/pistes-retention/constellation-ordinateur.png differ diff --git a/docs/assets/pistes-retention/constellation-situation-jour.png b/docs/assets/pistes-retention/constellation-situation-jour.png new file mode 100644 index 0000000..385f7cd Binary files /dev/null and b/docs/assets/pistes-retention/constellation-situation-jour.png differ diff --git a/docs/assets/pistes-retention/constellation-situation-nuit.png b/docs/assets/pistes-retention/constellation-situation-nuit.png new file mode 100644 index 0000000..da25b52 Binary files /dev/null and b/docs/assets/pistes-retention/constellation-situation-nuit.png differ diff --git a/docs/assets/pistes-retention/constellation-six-fascicules-tous.png b/docs/assets/pistes-retention/constellation-six-fascicules-tous.png new file mode 100644 index 0000000..f28cb52 Binary files /dev/null and b/docs/assets/pistes-retention/constellation-six-fascicules-tous.png differ diff --git a/docs/assets/pistes-retention/constellation-telephone-famille.png b/docs/assets/pistes-retention/constellation-telephone-famille.png new file mode 100644 index 0000000..b90538b Binary files /dev/null and b/docs/assets/pistes-retention/constellation-telephone-famille.png differ diff --git a/docs/assets/pistes-retention/constellation-telephone.png b/docs/assets/pistes-retention/constellation-telephone.png new file mode 100644 index 0000000..68124af Binary files /dev/null and b/docs/assets/pistes-retention/constellation-telephone.png differ diff --git a/docs/assets/pistes-retention/memoire-telephone-nuit.png b/docs/assets/pistes-retention/memoire-telephone-nuit.png new file mode 100644 index 0000000..48890f6 Binary files /dev/null and b/docs/assets/pistes-retention/memoire-telephone-nuit.png differ diff --git a/docs/assets/pistes-retention/memoire-telephone.png b/docs/assets/pistes-retention/memoire-telephone.png new file mode 100644 index 0000000..621d134 Binary files /dev/null and b/docs/assets/pistes-retention/memoire-telephone.png differ diff --git a/docs/game-design.md b/docs/game-design.md index 401ce76..89e1d38 100644 --- a/docs/game-design.md +++ b/docs/game-design.md @@ -162,6 +162,8 @@ Quand il ne reste qu'un exemplaire d'une brique utile à plusieurs mots, le joue Le jeu ne doit pas marquer une tentative « presque correcte » si le graphe éditorial ne permet pas de justifier cette proximité. +**Mémoire des essais** ([ADR 0081](adr/0081-memoire-des-essais.md), proposé) : une brique posée, la réserve range en fin de liste, grisées mais jouables, les briques déjà essayées avec elle dans cet ordre, avec leur raison (« aucune recette », « presque : inversez », « au codex »). Le serveur garde la paire d'un échec ou d'un « presque », sans issue ni date, et l'oublie à la parution suivante. + ## Le codex ### Vues @@ -172,6 +174,7 @@ Le jeu ne doit pas marquer une tentative « presque correcte » si le graphe éd - **Langues** : progression par langue et liens historiques déjà rencontrés. - **Familles** : branches découvertes, silhouettes restantes et objectifs. - **Relations** : vue avancée du chemin entre les formes, après validation de son intérêt UX. +- **Réseau** : la constellation en deux rives, les briques de la 1ʳᵉ case à gauche, celles de la 2ᵉ à droite, une bande par fascicule débloqué ; chaque mot trouvé est une courbe entre ses deux briques ([ADR 0083](adr/0083-vue-reseau-du-codex.md), proposé). - **Cabinet** (onglet du codex, fusionné avec les objectifs) : les nombres du joueur, jamais comparés à ceux des autres : jours de jeu, mots trouvés, langues rencontrées, mot au plus long voyage, cartes maîtrisées, légendaires trouvées, cartes de lecteur remplies ([ADR 0050](adr/0050-cohortes-de-retention-et-statistiques-du-joueur.md)). ### Vue globale @@ -285,13 +288,9 @@ Le corpus disponible, le nombre de fascicules possibles et la piste des fascicul ### Indices -Les indices peuvent être débloqués par l'expérimentation, le temps, des objectifs ou l'encre (5, 10, 20, 40 puis 80 gouttes du premier niveau à la solution, [ADR 0038](adr/0038-indices-a-prix-croissant-et-format-des-jalons.md) ; au moins 2 gouttes par pli), mais pas par un paiement dans le MVP : +Chaque carte à trouver vend trois indices à la carte, achetés dans l'ordre, une fois chacun, contre de l'encre : sa silhouette (4 gouttes), sa définition (8), son sens littéral (16). Jamais un paiement dans le MVP, jamais une légendaire ([ADR 0051](adr/0051-indices-a-la-carte.md)). -1. famille ou langue du résultat ; -2. nature des deux briques (préfixe, suffixe ou mot) ; -3. présence d'une transformation ; -4. emplacement d'une brique connue ; -5. solution, en dernier recours, sans punir durablement la progression. +Un indice acheté reste lisible : sous la table, les **enquêtes en cours** listent les cartes à trouver dont un indice est payé, et ne montrent que ce qui l'a été, jusqu'à la découverte du mot ([ADR 0080](adr/0080-enquetes-en-cours.md), proposé). ### Quêtes et ricochets @@ -300,7 +299,7 @@ La page Quêtes ([ADR 0042](adr/0042-page-quetes-et-recompenses-a-recuperer.md)) - **Journalières** : chaque jour, trois quêtes, une à la table de fusion, une de mémoire et une d'adresse, renouvelées à minuit GMT. Le serveur ne tire que des quêtes que l'état du joueur rend faisables, sans dépendre de l'énergie ni du hasard. Chacune demande un acte de réflexion, jamais un simple geste. Le défi quotidien devient la quête de table : une recette que la réserve permet, donnée par sa seule piste de sens (« Trouvez le mot qui veut dire “peur de l'eau” »). - **La carte de lecteur** reçoit un tampon chaque jour où les trois quêtes sont faites, sans obligation de jours consécutifs. Au 7ᵉ tampon : 20 gouttes, un sablier et un pli de lecteur, tiré parmi les peu communes et les rares du fascicule choisi. Aucune flamme, aucun rappel. - Pendant la première semaine, les quêtes initiales s'affichent en tête de l'onglet ([ADR 0046](adr/0046-demarrage-genereux-cadeau-de-bienvenue-et-quetes-initiales.md)). -- **Fascicules** : les jalons de chaque fascicule ([ADR 0038](adr/0038-indices-a-prix-croissant-et-format-des-jalons.md)). Le 2ᵉ jalon d’un fascicule débloque le suivant ([ADR 0069](adr/0069-deblocage-progressif-des-fascicules.md)). +- **Fascicules** : les jalons de chaque fascicule ([ADR 0038](adr/0038-indices-a-prix-croissant-et-format-des-jalons.md)). Le 2ᵉ jalon d’un fascicule débloque le suivant ([ADR 0069](adr/0069-deblocage-progressif-des-fascicules.md)). Sous les jalons, les **quêtes de collection** du fascicule : tous ses préfixes, tous ses suffixes, tous ses mots communs, peu communs ou rares, hors légendaires ([ADR 0082](adr/0082-quetes-de-collection-par-fascicule.md), proposé). - **Au long cours** : des quêtes à paliers qui traversent les fascicules, sur les langues, les familles, les transformations, la maîtrise et les cartes de lecteur. Aucune ne compte les légendaires, sauf la première trouvée. Les **ricochets** ([ADR 0044](adr/0044-ricochets-reviser-et-maitriser-les-cartes.md)) sont de courtes questions sur les cartes déjà trouvées : le sens d'une brique, la brique d'un sens, le mot d'un sens littéral, sens littéral ou sens actuel, découper un mot (le joueur glisse une lame sur le mot, pose ses coupes, puis valide : [ADR 0053](adr/0053-decouper-glisser-une-lame-puis-valider.md)), relier des paires, assembler un mot (le joueur choisit un préfixe et un suffixe pour former le mot dont il lit la définition actuelle : [ADR 0067](adr/0067-ricochets-assembler-un-mot-depuis-sa-definition.md)). Ils ne consomment rien, n'ont pas de chronomètre et rendent une carte maîtrisée après trois bonnes réponses sur trois jours différents. Une carte maîtrisée reste dans le tirage, au plus deux par séance de cinq questions ; une erreur la fait descendre au niveau 2, elle perd sa maîtrise et revient le lendemain, et il lui faut de nouveau trois bonnes réponses au niveau 3 sur trois jours différents ([ADR 0065](adr/0065-ricochets-la-maitrise-se-perd-et-se-regagne.md)). @@ -615,7 +614,12 @@ Ces pistes ont été examinées en octobre 2026, puis écartées. Elles ne revie - la copie d'une brique contre de l'encre ; - une recharge plus rapide la première semaine ; - des quêtes faites de simples gestes, et une série de jours consécutifs ; -- une frustration dosée pour pousser à l'achat. +- une frustration dosée pour pousser à l'achat ; +- un pli qui propose deux briques pour n’en garder qu’une ; +- la réserve affichée en tableau préfixes × suffixes (remplacée par la mémoire des essais, [ADR 0081](adr/0081-memoire-des-essais.md)) ; +- l’annonce d’un mot croisé à la révélation ; +- des ricochets de chronologie ou fondés sur les exemples concrets ; +- des fascicules spéciaux hors calendrier. ## Expérimentations UX prioritaires diff --git a/docs/interfaces.html b/docs/interfaces.html index ce309b6..7dd0511 100644 --- a/docs/interfaces.html +++ b/docs/interfaces.html @@ -124,9 +124,9 @@

Réserve de départ

I-09Démo

Table de fusion

-

Réserve filtrable avec pastilles « ×n » et briques épuisées, rail ordonné de deux cases exactement (jamais trois briques), boutons Fusionner et Vider. Le codex reste accessible sans perdre la proposition.

+

Réserve filtrable avec pastilles « ×n » et briques épuisées, rail ordonné de deux cases exactement (jamais trois briques), boutons Fusionner et Vider. Une brique posée, la réserve range en fin de liste, grisées mais jouables, les briques déjà essayées avec elle, avec leur raison (« aucune recette », « presque : inversez », « au codex », ADR 0081). Sous la table, les enquêtes en cours gardent lisibles les indices achetés (ADR 0080). Le codex reste accessible sans perdre la proposition.

Mobile
Table en haut, réserve dessous ; un toucher pose la brique.
Ordinateur
Réserve et table côte à côte ; glisser-déposer et réorganisation au pointeur.
-

MaquetteEssayerComposantADR 0012

+

MaquetteEssayerComposantADR 0012ADR 0081

I-10Démo
@@ -145,9 +145,9 @@

Révélation et fiche de découverte

I-12Démo

Indices

-

Indices graduels (famille ou langue, nature des deux briques, transformation, emplacement, solution), débloqués par l’expérimentation, le temps, les objectifs ou l’encre : 5, 10, 20, 40 puis 80 gouttes selon le niveau.

-
Mobile
Feuille ouverte depuis l’en-tête de la table.
Ordinateur
Panneau à côté de la table.
-

MaquetteL’encre et l’indiceADR 0038

+

Une carte à trouver, la plus utile et formable avec la réserve ; trois indices à la carte, achetés dans l’ordre, une fois chacun : silhouette (4 gouttes), définition (8), sens littéral (16). Rien d’autre, jamais une légendaire (ADR 0051). Ce qui est acheté se relit ensuite dans les enquêtes en cours (ADR 0080).

+
Mobile
Feuille ouverte depuis l’en-tête de la table.
Ordinateur
Dialogue centré au-dessus de la table.
+

MaquetteL’encre et l’indiceADR 0051ADR 0080

I-13Maquette
@@ -165,7 +165,7 @@

Réserve sans découverte possible

I-14Démo

Vue globale

-

Grille de petites cartes. Vues Tout, Récentes, Familles et Cabinet ; les types (mots, préfixes, suffixes, langues) se filtrent en puces, avec leurs compteurs. Fascicules avec leur jaquette, leur nom en avant et leur numéro en petit (« Bêta · N° 0 »), et leur complétude. Tri par numéro, ordre alphabétique, type ou fascicule ; toucher à nouveau le tri actif l’inverse (flèche ↓ ↑, « Z → A »). Trié par fascicule, chaque groupe se replie, avec sa mini-jaquette dans l’en-tête. La rareté d’une brique se lit en haut à droite du bandeau ; une carte de mot n’en porte pas. Une carte de langue montre sa lettre emblème et son nom. Les légendaires trouvées, briques et mots, s’affichent à part, et un compteur « ◆ n » les compte à côté de chaque jauge, même à 0 (ADR 0043). Chaque fascicule montre aussi sa maîtrise (ADR 0044), et la date du prochain fascicule s’affiche en tête (ADR 0049). Un fascicule verrouillé garde sa jaquette avec un cadenas ; il ne montre que les mots déjà trouvés, sans silhouette, et son compteur dit « 2 trouvées », sans total (ADR 0069). Vue, filtres, tri, sens du tri et carte ouverte se lisent dans l’adresse (ADR 0034), jamais la recherche. Au survol, une jaquette se soulève et s’incline comme une petite carte.

+

Grille de petites cartes. Vues Tout, Récentes, Familles, Réseau (I-35) et Cabinet ; les types (mots, préfixes, suffixes, langues) se filtrent en puces, avec leurs compteurs. Fascicules avec leur jaquette, leur nom en avant et leur numéro en petit (« Bêta · N° 0 »), et leur complétude. Tri par numéro, ordre alphabétique, type ou fascicule ; toucher à nouveau le tri actif l’inverse (flèche ↓ ↑, « Z → A »). Trié par fascicule, chaque groupe se replie, avec sa mini-jaquette dans l’en-tête. La rareté d’une brique se lit en haut à droite du bandeau ; une carte de mot n’en porte pas. Une carte de langue montre sa lettre emblème et son nom. Les légendaires trouvées, briques et mots, s’affichent à part, et un compteur « ◆ n » les compte à côté de chaque jauge, même à 0 (ADR 0043). Chaque fascicule montre aussi sa maîtrise (ADR 0044), et la date du prochain fascicule s’affiche en tête (ADR 0049). Un fascicule verrouillé garde sa jaquette avec un cadenas ; il ne montre que les mots déjà trouvés, sans silhouette, et son compteur dit « 2 trouvées », sans total (ADR 0069). Vue, filtres, tri, sens du tri et carte ouverte se lisent dans l’adresse (ADR 0034), jamais la recherche. Au survol, une jaquette se soulève et s’incline comme une petite carte.

Mobile
Grille de trois colonnes, filtres en puces défilantes, tri dans une feuille.
Ordinateur
Grille large, fascicules et filtres visibles en permanence.

MaquetteLe codexCartesADR 0015ADR 0043

@@ -197,6 +197,13 @@

Cabinet : objectifs et jalons

Mobile
Onglet « Objectifs » en tête du codex ; Quêtes dans le menu de la navigation.
Ordinateur
Même onglet, liste et détail côte à côte ; Quêtes dans le rail.

MaquetteADR 0004ADR 0020ADR 0042ADR 0045ADR 0069

+
+
I-35Maquette
+

Vue Réseau

+

Une vue du codex : la constellation en deux rives. Les briques trouvées de la 1ʳᵉ case à gauche, celles de la 2ᵉ à droite, une bande par fascicule débloqué, par ordre alphabétique, une rangée de 44 px ; chaque mot trouvé est une courbe qui traverse la rivière, la dernière découverte en Corail. Une barre Rosée sous chaque brique donne sa famille. Toucher une brique suit sa famille dans un panneau collé en bas. Dans « Tous », les liens trop longs deviennent des antennes chiffrées ; une liste en repli dit la même chose en texte. Jamais une brique à trouver, une légendaire ni un fascicule verrouillé (ADR 0083).

+
Mobile
S’ouvre sur le dernier fascicule débloqué qui a un mot trouvé ; la rivière se resserre.
Ordinateur
Compteurs « 2/3 » à côté des briques, vue « Tous » sur toute la largeur.
+

MaquetteEn situationADR 0083

+
diff --git a/docs/maquettes.html b/docs/maquettes.html index b40c0f5..04b8114 100644 --- a/docs/maquettes.html +++ b/docs/maquettes.html @@ -52,9 +52,9 @@
Jeu · Maquettes

Chaque écran, deux fois

-

Les trente-deux interfaces de l’inventaire, dessinées sur mobile puis sur ordinateur, avec les seuls composants du design système. Ce sont des maquettes statiques : les contenus sont des exemples de démonstration, à vérifier avant publication.

Voir aussiL’inventaireDesign systèmeADR 0001

+

Les trente-trois interfaces de l’inventaire, dessinées sur mobile puis sur ordinateur, avec les seuls composants du design système. Ce sont des maquettes statiques : les contenus sont des exemples de démonstration, à vérifier avant publication.

Voir aussiL’inventaireDesign systèmeADR 0001

- +
@@ -139,12 +139,12 @@
Groupe C

Table de fusion

Formuler une hypothèse, la tester, lire le résultat.

-
I-09

Table de fusion

L’écran central. La table en haut, la réserve dessous sur mobile ; côte à côte sur ordinateur.

Fiche I-09EssayerComposantADR 0012ADR 0032

+
I-09

Table de fusion

L’écran central. La table, la réserve en feuille, la mémoire des essais et les enquêtes en cours.

Fiche I-09EssayerComposantADR 0012ADR 0081ADR 0080

-
Mobile · 390 px
-
Ordinateur · 1 280 px
+
Mobile · 390 px · réserve et mémoire des essais
+
Ordinateur · 1 280 px · enquêtes en cours
- +
I-10

Retours d’une tentative

Quatre retours, tous en ligne et à l’endroit de l’action. Aucun ne consomme d’exemplaire.

Fiche I-10RetoursADR 0003

@@ -163,12 +163,12 @@
-
I-12

Indices

Cinq niveaux, du plus vague à la solution. Chacun se débloque sans paiement.

Fiche I-12L’encre et l’indiceADR 0020ADR 0032

+
I-12

Indices

Trois indices à la carte, achetés dans l’ordre contre de l’encre : silhouette, définition, sens littéral.

Fiche I-12L’encre et l’indiceADR 0051ADR 0080

-
Mobile · 390 px
-
Ordinateur · 1 280 px
+
Mobile · 390 px
+
Ordinateur · 1 280 px
- +
I-13

Réserve sans découverte possible

Pas une impasse : l’écran dit pourquoi, ce qui arrive et où aller.

Fiche I-13États videsFilet d’utilité

@@ -224,6 +224,14 @@
+
+
I-35

Vue Réseau du codex

La constellation en deux rives : préfixes à gauche, suffixes à droite, une courbe par mot trouvé, une bande par fascicule.

Fiche I-35En situationADR 0083

+
+
Mobile · 390 px
+
Ordinateur · 1 280 px
+
+ +
diff --git a/docs/modele-donnees.md b/docs/modele-donnees.md index 523e91c..eb3236c 100644 --- a/docs/modele-donnees.md +++ b/docs/modele-donnees.md @@ -526,6 +526,7 @@ erDiagram JOUEUR ||--o{ CARTE_LECTEUR : "remplit" JOUEUR ||--o{ RICOCHET : "révise" JOUEUR ||--o{ PALIER_ATTEINT : "a atteint" + JOUEUR ||--o{ ESSAI : "a essayé" JOUEUR ||--o{ QUETE_INITIALE : "a reçu" JOUEUR ||--|{ APPAREIL : "joue sur" JOUEUR ||--o| COMPTE : "est rattaché à" @@ -678,6 +679,12 @@ erDiagram instant atteint_le instant recupere_le "nullable" } + ESSAI { + id joueur_id PK, FK + id gauche PK "catalogue : brique de la 1re case" + id droite PK "catalogue : brique de la 2e case" + id fascicule_juge "catalogue : dernier fascicule paru à l'essai" + } QUETE_INITIALE { id joueur_id PK, FK id quete_id PK "catalogue ; le cadeau de bienvenue en est une" @@ -713,12 +720,13 @@ erDiagram | `quete_du_jour` | Les trois quêtes du jour. | Tirées à la première visite après minuit GMT, seulement parmi les quêtes faisables ; jamais sur un mot légendaire ([ADR 0045](adr/0045-quetes-du-jour-carte-de-lecteur-et-quetes-au-long-cours.md)). | | `carte_lecteur` | Cartes de lecteur et leurs tampons. | Un tampon par jour où les trois quêtes sont faites ; au 7ᵉ, la récompense attend d’être récupérée et une nouvelle carte commence. | | `ricochet` | Niveau de chaque carte trouvée. | Seule une bonne réponse à une carte à revoir fait monter son niveau ; `bonnes_niveau_3` compte les bonnes réponses données au niveau 3 et revient à 0 après une erreur ; à la troisième, la carte est maîtrisée. Une erreur sur une carte à revoir, maîtrisée ou non, la fait descendre d’un niveau et, si elle était maîtrisée, vide `maitrisee_le` ; elle revient le lendemain ([ADR 0044](adr/0044-ricochets-reviser-et-maitriser-les-cartes.md), [ADR 0065](adr/0065-ricochets-la-maitrise-se-perd-et-se-regagne.md)). | -| `palier_atteint` | Paliers des quêtes au long cours. | Comme `jalon_atteint` : marqué quand il est atteint, récupéré une seule fois. | +| `palier_atteint` | Paliers des quêtes au long cours et quêtes de collection. | Comme `jalon_atteint` : marqué quand il est atteint, récupéré une seule fois. Une quête de collection d’un fascicule ([ADR 0082](adr/0082-quetes-de-collection-par-fascicule.md)) se récupère de la même façon, par l’identifiant de palier que lui donne le catalogue. | +| `essai` | Mémoire des essais. | Une paire essayée sans succès (échec ou « presque »), dans l’ordre des cases, si le joueur connaît les deux briques. Ni issue, ni date. 3 000 lignes au plus par joueur ; les lignes jugées sous un fascicule plus ancien s’oublient en bloc à la parution suivante ([ADR 0081](adr/0081-memoire-des-essais.md)). | | `quete_initiale` | Cadeau de bienvenue et quêtes initiales. | Une ligne par quête faite ; le cadeau est atteint à la fin du tutoriel ([ADR 0046](adr/0046-demarrage-genereux-cadeau-de-bienvenue-et-quetes-initiales.md)). | | `graine_accordee` | Réserves de départ reçues. | Une ligne par fascicule semé : ses graines ne sont accordées qu'une fois, quand le fascicule est débloqué ([ADR 0030](adr/0030-reserve-de-depart-par-fascicule.md), [ADR 0069](adr/0069-deblocage-progressif-des-fascicules.md)). Chaque exemplaire accordé est un `mouvement` de motif `depart`. | | `fascicule_debloque` | Fascicules débloqués par le joueur. | `joueur_id`, `fascicule_id`, `debloque_le`. Le premier fascicule paru l’est d’emblée ; chacun des suivants quand le 2ᵉ jalon du précédent est atteint. Une ligne n’est jamais supprimée, sauf par la réinitialisation du profil ([ADR 0069](adr/0069-deblocage-progressif-des-fascicules.md)). | -**Ce qui n'est jamais stocké** : les propositions de fusion (échecs, « presque », recettes déjà connues). Elles ne modifient rien, donc elles ne laissent aucune ligne ; la télémétrie n'en garde qu'un compteur par résultat ([ADR 0010](adr/0010-observabilite-et-vie-privee.md)). +**Ce qui n'est jamais stocké** : l'issue et la date d'une proposition de fusion, et toute proposition d'une recette déjà connue. Seule la paire d'un échec ou d'un « presque » est gardée dans `essai`, jusqu'à la parution suivante, pour que la réserve range ce qui a déjà été essayé ([ADR 0081](adr/0081-memoire-des-essais.md)) ; la télémétrie n'en garde qu'un compteur par résultat ([ADR 0010](adr/0010-observabilite-et-vie-privee.md)). ### Exemple : une découverte diff --git a/docs/pistes-retention.html b/docs/pistes-retention.html new file mode 100644 index 0000000..6c54765 --- /dev/null +++ b/docs/pistes-retention.html @@ -0,0 +1,2083 @@ + + + + + + + + + Pistes de rétention · ÉtymoLogique + + + + + + + + + + + + +
+
+
+
+
Jeu · Page de travail · v2

Dynamiser la partie, la faire durer

+
+

Deuxième version, après la relecture du 18 octobre 2026. Quatre pistes retenues, chacune avec une démo jouable. Aucune n’est décidée : chacune demande son ADR, sauf les enquêtes en cours, qui ne changent aucune règle. Toutes respectent la boussole : aucune série, aucune notification, aucune récompense qui expire, rien à vendre, et se tromper ne coûte toujours rien.

+

Les mots des démos viennent des fascicules déjà parus (Rosette à Arbre des langues) du dépôt Content ; la plupart de leurs faits sont encore en brouillon. Ce sont des exemples, pas des faits de production. Les légendaires et les mots légendaires en sont exclus.

+

Voir aussiLa boussoleQuêtes du jourIndices à la carteLégendaires

+
+
+ +

Ce qui change depuis la v1

+
    +
  • Mémoire des essais. La grille préfixes × suffixes et l’annonce « déjà tentée » disparaissent. À leur place, les briques déjà essayées avec celle qui est sur la table se grisent et passent en fin de réserve, dynamiquement. La trace est tenue par le serveur et oubliée à chaque parution.
  • +
  • Quêtes de collection. Le carré laisse place à vos quêtes : tous les préfixes, tous les suffixes d’un fascicule. « Toutes les cartes de difficulté X » devient « tous les mots communs, peu communs, rares » : voir pourquoi, la décision vous revient.
  • +
  • Constellation. Le graphe à forces est remplacé par une disposition en deux rives, sans aucun chevauchement, où une brique ne bouge plus quand un mot arrive. Voir la vue en situation, sur téléphone et sur ordinateur.
  • +
  • Enquêtes en cours. Elles ont leur démo.
  • +
  • Écartés et consignés dans la liste des pistes de rétention écartées du game design : le pli à choix, la réserve en tableau, l’annonce du mot croisé, les ricochets « Chronologie » et « Exemple », les fascicules spéciaux.
  • +
+ +

Ce qui freine aujourd’hui

+
    +
  • La découverte revient une fois par jour.Une charge toutes les 12 h et environ deux plis par mot (ADR 0022) : le moment fort du jeu revient à peu près une fois par jour. Le reste de la séance, ce sont surtout des ricochets.
  • +
  • La recherche tourne au tâtonnement.Rosette compte 6 préfixes et 16 suffixes, soit 96 paires pour 47 mots ; Routes des mots, 25 × 18 = 450 paires pour 96 mots (légendaires exclues). Les essais sont gratuits, mais rien ne garde la trace de ceux déjà faits.
  • +
  • Un indice payé se perd de vue.La feuille des indices ne montre qu’une carte à la fois. Dès qu’elle passe à une autre, ce qui a été acheté ne se lit plus nulle part : jusqu’à 28 gouttes perdues de vue par carte.
  • +
  • Rien ne montre la forme de ce qu’il a construit.Le Cabinet donne des nombres, le codex des cartes. Le réseau que forment ses mots, qui fait l’originalité du jeu, reste invisible.
  • +
+ +

D’abord, de quoi mesurer

+
+

Trois chantiers déjà prévus pèsent plus lourd sur la rétention que n’importe quelle piste nouvelle. Sans eux, aucune ne pourra être jugée.

+
    +
  1. La première session (J5).Le tutoriel n’existe pas encore et le cadeau de bienvenue se récupère dès la création du profil. La bêta vise 80 % de tutoriels terminés et 25 % de retours au 7ᵉ jour (ADR 0048).
  2. +
  3. Les agrégats (ADR 0050).agreger-jour et agreger-mois sont écrits et testés dans l’App, mais pas encore planifiés dans Infra. D’ici là, le retour au 1ᵉʳ, au 7ᵉ et au 30ᵉ jour reste invisible.
  4. +
  5. La télémétrie (J7).Elle dira quelles quêtes se terminent, combien de tentatives précèdent une découverte et combien de joueurs restent sans découverte possible.
  6. +
+

La télémétrie n’a pas d’identifiant durable (ADR 0050) et aucun test A/B n’est prévu : le plus simple est de comparer les cohortes mensuelles. Livrez une piste par mois pour pouvoir attribuer un effet.

+
+ + +
+
+ Piste 1 ADR · API · PWA +

La mémoire des essais : les briques déjà essayées passent en fin de réserve

+
+
Besoin
Garder la trace de ce qui a déjà été essayé, pour ne pas refaire les mêmes essais en boucle. Passé une vingtaine de briques, le joueur oublie ses échecs.
+
Proposition
La réserve se réordonne selon ce qui est sur la table. Dès qu’une brique est posée, les briques déjà essayées avec elle, dans cet ordre, se grisent et passent en fin de liste, sous l’intertitre « Déjà essayées avec géo- ». Leur ligne de sens dit pourquoi : « aucune recette », « presque : inversez » ou « au codex ». Retirez la brique ou posez-en une autre : la liste se recalcule aussitôt, les briques glissent vers leur nouvelle place.
+
Le gris
Un fond neutre Sable, le libellé en Encre secondaire, sans ombre. Une brique grisée reste jouable, puisque se tromper ne coûte rien : ce n’est ni l’état désactivé (opacité de 40 %), ni l’état épuisé (pointillés hachurés).
+
Ce qui ne se voit jamais
Une paire jamais essayée ne bouge pas : les briques non grisées gardent l’ordre habituel de la réserve, sans tri ni compteur. Seuls passent en fin de liste les échecs, les « presque » et les mots déjà au codex : rien que le joueur ne sache déjà.
+
Données
Une table essai : le joueur, les deux briques dans l’ordre des cases, le dernier fascicule paru. Ni issue, ni date, ni texte du catalogue. Le serveur l’écrit dans la transaction de POST /fusion, pour un échec ou un « presque », seulement si le joueur possède les deux briques, avec un plafond de 3 000 lignes. Les mots au codex n’ont besoin d’aucune ligne : le client les déduit de la règle de fusion. La trace suit le compte sur tous ses appareils, part avec la partie et entre dans l’export.
+
Oubli
À chaque parution, toutes les lignes s’effacent en bloc, avec un seul message : de vieilles paires peuvent devenir des mots (31 recettes de Routes des mots réunissent deux briques déjà parues, comme thermo- + -phone). Une purge paire par paire désignerait les familles que prolonge le fascicule, une piste écartée.
+
Décidé
L’oubli à chaque parution est retenu. L’ADR 0081 (proposé) revient sur « les propositions de fusion ne sont jamais stockées » (ADR 0027, modèle de données § 7).
+
À mesurer
Tentatives avant une découverte (indicateur du game design).
+
+
+
+
+ + +
+
+ Piste 2 ADR · Content · API · PWA +

Les quêtes de collection : tout un fascicule

+
+
Proposition
Dans l’onglet Fascicules de la page Quêtes, sous les jalons de chaque fascicule débloqué, un bloc « Collection » : tous les préfixes (de 6 à 25 dans les fascicules parus), tous les suffixes (de 14 à 18), et tous les mots de chaque rareté. Chaque quête a sa jauge, sa récompense annoncée d’avance et se récupère comme un palier (valeurs de départ, à simuler : de 20 à 40 gouttes, avec ou sans sablier). Une quête au long cours facultative compte les fascicules dont tous les préfixes sont connus (paliers 1, 3, 6).
+
Pourquoi la rareté plutôt que la difficulté
La difficulté n’est jamais affichée (ADR 0047), et elle serait presque vide : les fascicules parus n’ont que 0 à 2 mots difficiles, aucun dans Rosette ni Argile. La rareté des mots est déjà affichée (ADR 0040) et donne des quêtes jouables : de 19 à 56 mots communs, de 14 à 37 peu communs, 3 ou 4 rares quand un fascicule en a assez. Elle mesure ce que coûtent les briques, pas ce que demande la déduction : la décision vous revient.
+
Toujours atteignable
La garantie de nouveauté au 6ᵉ pli borne « tous les préfixes » : au plus 6 × (préfixes + suffixes) plis du fascicule, quelques dizaines en pratique. Les mots rares sont plus lents, puisqu’il faut plusieurs exemplaires d’une même brique rare : à simuler avant de publier. Une quête de moins de 3 cartes n’est pas déclarée.
+
Garde-fous
Totaux hors légendaires ; un fascicule verrouillé ne montre que sa condition (ADR 0069) ; aucune liste des cartes manquantes. « Les préfixes d’Argile » sont ceux de son pli, reprises comprises : le filtre du codex doit alors les montrer aussi.
+
À construire
Un ADR « Quêtes de collection par fascicule », qui ajoute une condition fermée à l’ADR 0045 et un bloc à l’onglet Fascicules (ADR 0042). Content : un tableau collections dans chaque fascicule, quatre contrôles du validateur, les totaux calculés à la compilation. API : la progression dans quete.rs, la récupération par la table palier_recupere existante. PWA : le bloc dans Quetes.tsx.
+
+
+
+
+ + +
+
+ Piste 3 ADR · maquette · PWA +

La constellation : le codex en deux rives

+
+
Proposition
Une vue du codex. À gauche les préfixes trouvés, à droite les suffixes, une bande par fascicule ; chaque mot trouvé est une courbe qui traverse la rivière entre ses deux briques. Sous chaque brique, une barre Rosée donne la progression de sa famille, comme au verso de sa carte.
+
Lisible par construction
Une rangée de 44 px par brique : deux briques ne se chevauchent jamais, et la rangée entière se touche. Les courbes restent dans la rivière : elles ne passent jamais sous une brique ni sous un texte. Une brique ne bouge que pour faire place à une nouvelle, dans l’ordre alphabétique. La vue s’ouvre sur le dernier fascicule débloqué ; dans la vue d’ensemble, les liens trop longs deviennent des antennes chiffrées (« ↓3 »).
+
Pourquoi pas un graphe à forces
Deux prototypes ont été mesurés. Le graphe à forces déplaçait 27 briques sur 30 à chaque découverte (48 px en médiane) et devenait un écheveau au-delà de 5 fascicules sur ordinateur, 3 sur mobile. Les deux rives restent stables, se calculent en quelques millisecondes et gardent leur structure en grandissant.
+
Aides
Un filtre par fascicule, la mise en avant d’une famille au toucher (ses mots en clair, avec leur brique partenaire), une liste en repli, qui sert aussi aux lecteurs d’écran.
+
Garde-fous
Seules les briques trouvées apparaissent, jamais une case pour une brique à trouver. L’ordre alphabétique ne dit rien des recettes. Les totaux ne comptent que les fascicules débloqués. Une légendaire trouvée demandera une bande à part, remplie dans l’ordre d’arrivée : à décider dans l’ADR.
+
À construire
Un ADR et une maquette, avec la vue Filiation déjà prévue au potentiel d’évolution. Le calcul se fait côté client, sur la projection du codex.
+
+
+
+
+ +
+

La constellation en situation

+

Telle qu’elle pourrait paraître dans l’App, comme une vue du codex à côté de Tout, Récentes et Familles, au même moment de la partie : Rosette complet, Argile ouvert et en cours. Les deux écrans sont jouables : touchez une brique pour suivre sa famille, changez de fascicule ou passez en liste.

+
+
+
+
9:41●●●
+
Codex
+
+
ToutRécentesFamillesRéseauCabinet
+
+
+ +
+
Téléphone · 390 px
+
+
+
+
+
etymologique · codex · réseau
+
+ +
+
CodexVue Réseau
+
+
ToutRécentesMotsBriquesLanguesFamillesRéseauCabinet
+
+
+
+
+
+
+
Ordinateur · fenêtre de 820 px
+
+
+
+ + +
+
+ Piste 4 PWA seule +

Les enquêtes en cours : les indices restent sous les yeux

+
+
Proposition
Une enquête, c’est une carte à trouver dont le joueur a acheté au moins un indice. Elle reste visible sous la table de fusion, et en tête de la feuille de réserve, jusqu’à la découverte du mot. Une ligne par enquête, repliée par défaut ; ouverte, la silhouette, la définition et le sens littéral achetés.
+
Ce qui ne se voit jamais
Seul ce qui a été payé apparaît (ADR 0051). Ni le mot, ni ses lettres, ni ses briques, ni sa langue, ni sa rareté, ni s’il est formable avec la réserve ; aucun bouton d’achat. Jamais un mot légendaire ni une carte d’un fascicule verrouillé.
+
À construire
Aucune règle, aucun contrat, aucune table : la PWA relit l’état que le serveur envoie déjà (indices). Une fonction enquetesEnCours, un composant Enquetes.tsx inséré dans la table et la feuille de réserve, une quarantaine de lignes de style, les tests : environ un jour et demi. Les maquettes I-09 et I-12 sont à mettre à jour.
+
Au passage
L’ADR 0038 disait « un niveau acquis reste lisible » ; l’ADR 0051 ne le redit pas et l’App ne le garantit plus. Les enquêtes rétablissent cette promesse ; une correction de l’ADR 0051 suffit pour l’écrire.
+
+
+
+
+ +

Dans quel ordre

+
    +
  1. 0
    Les fondations. Première session (J5), agrégats planifiés dans Infra, télémétrie (J7). Avant la bêta de janvier 2027.
  2. +
  3. 1
    Les enquêtes en cours. La PWA seule, sans règle nouvelle, environ un jour et demi ; elles comblent un trou qui existe déjà.
  4. +
  5. 2
    Les quêtes de collection, une fois la question de la difficulté tranchée. Un ADR, puis Content, API et PWA ; à livrer avec la correction du 3ᵉ jalon (ci-dessous).
  6. +
  7. 3
    La mémoire des essais. Un ADR sur le stockage des essais, puis l’API et la PWA.
  8. +
  9. 4
    La constellation. Un ADR et une maquette, avec la vue Filiation.
  10. +
+ +

Écarts relevés en chemin

+

Vérifiés dans le code et les ADR. Les trois premiers trahissent le nombre de légendaires, que l’ADR 0043 veut secret ; ils méritent une correction indépendante de ces pistes.

+
+ + + + + + + + + + + +
ÉcartOùPourquoi c’est un problème
Le 3ᵉ jalon compte les mots légendairescrates/catalogue/src/jeu.rs (jalons : toutes les cartes de rôle « resultat »), seuils des fichiers de fasciculeLe dernier jalon de chaque fascicule ne s’atteint qu’en trouvant aussi ses mots légendaires : il dépend des 1,2 %, et son seuil, comparé au nombre de cartes du codex, dit combien il y en a. Correction : compter hors légendaires et ramener le seuil au total visible.
Un mot légendaire apparaît dès que sa légendaire est trouvéeweb/src/services/codex.ts, construireCodexIl s’affiche en silhouette, reçoit des indices et entre dans la jauge de complétude, alors que l’ADR 0043 et le game design le gardent invisible jusqu’à sa découverte.
Des trous dans la numérotation du codexweb/src/services/codex.ts : n avance avant d’écarter une carte cachéeUn numéro qui manque signale une légendaire cachée.
Le mot ingrédient ne se consomme jamaisRoadmap de l’App (J3) contre game-design.md (pistes écartées)Le game design écarte « un mot découvert qui deviendrait une brique sans compteur d’exemplaires » ; aucun ADR ne tranche, alors que l’ADR 0035 le demandait.
La « piste » gratuite et les cinq niveaux d’indices surviventdesign-system.html § 3.5, I-12 dans interfaces.html et maquettes.html, game-design.mdL’ADR 0051 (accepté) a retiré la piste des cartes à trouver et les cinq niveaux de l’ADR 0038.
« Le client n’a pas les recettes »Contexte de l’ADR 0041Phrase reprise de l’ADR 0024, remplacée depuis par l’ADR 0027 : le client charge les recettes des fascicules parus (web/src/services/jeu.ts).
Le déblocage cité comme ADR 0068Commentaires de l’App (progression.rs, quetes.ts, codex.ts) et roadmapC’est l’ADR 0069 ; le 0068 porte sur les ricochets.
+
+
+
+
+ + + + + + + + + + + diff --git a/docs/potentiel-evolution.md b/docs/potentiel-evolution.md index 3d49949..9a0cc4e 100644 --- a/docs/potentiel-evolution.md +++ b/docs/potentiel-evolution.md @@ -46,7 +46,7 @@ Le corpus publiable écarte les mots archaïques, trop techniques ou trop rares, ## Piste : les fascicules spéciaux -> Piste ouverte, non décidée. Elle demandera un ADR avant toute mise en œuvre. +> Piste écartée en octobre 2026, lors de la revue des pistes de rétention ([game design](game-design.md#pistes-de-rétention-écartées)). Elle ne revient qu’avec un ADR ; le texte ci-dessous reste pour mémoire. Au-delà du fascicule mensuel, l'équipe pourrait publier, **hors calendrier et quand elle le souhaite**, un fascicule spécial qui ajoute d'un coup beaucoup de contenu : une grande famille de mots, une langue d'origine, un thème (la médecine, la navigation, les sciences). diff --git a/outils/src/bin/build_adr.rs b/outils/src/bin/build_adr.rs index f23aa93..07d22a0 100644 --- a/outils/src/bin/build_adr.rs +++ b/outils/src/bin/build_adr.rs @@ -366,6 +366,10 @@ const XREFS: &[(&str, &[(&str, &str)])] = &[ ("0055", &[("interfaces.html#i-11", "Révélation et fiche")]), ("0056", &[("interfaces.html#i-11", "Révélation et fiche")]), ("0079", &[("interfaces.html#i-15", "Carte agrandie")]), + ("0080", &[("maquettes.html#m-09", "Table de fusion et enquêtes"), ("maquettes.html#m-12", "Indices"), ("pistes-retention.html#enquetes-titre", "La démo")]), + ("0081", &[("maquettes.html#m-09", "Réserve et mémoire des essais"), ("pistes-retention.html#memoire-titre", "La démo")]), + ("0082", &[("pistes-retention.html#collection-titre", "La démo"), ("maquettes.html#m-27", "Page Quêtes")]), + ("0083", &[("maquettes.html#m-35", "Vue Réseau"), ("pistes-retention.html#constellation-situation", "En situation")]), ("0057", &[("codex.html#codex", "Codex")]), ("0058", &[("modele.html#t-langue", "Table des langues")]), ("0059", &[("plis.html#fascicules", "Les fascicules côté joueur")]),