Skip to content

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

Closed

Description

@Lunik

Constat / besoin

Les essais sont gratuits, mais rien ne garde la trace de ceux déjà faits. Rosette compte 96 paires possibles pour 47 mots, et 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.

Piste 1 de la page de travail pistes-retention.html (Design#51), retenue par le propriétaire.

Vérification faite

  • Code : POST /fusion (crates/api/src/progression.rs) ne garde rien d’un échec ou d’un « presque ». web/src/composants/ReserveModale.tsx et Reserve.tsx trient la réserve sans tenir compte de la brique posée sur la table.
  • ADR : l’ADR 0027 et le modèle de données (§ 7) disent que les propositions de fusion ne sont jamais stockées. Il faut donc un ADR qui revienne sur ce point. Le propriétaire a accepté la proposition, y compris l’oubli à chaque parution.
  • Doublons : aucune issue équivalente.
  • Verdict : confirmé.

Comportement attendu

  • Une brique posée trie la réserve. Les briques déjà essayées avec elle, dans cet ordre de cases, se grisent et passent en fin de liste, sous l’intertitre « Déjà essayées avec géo- · 3 ».
  • La ligne de sens dit pourquoi : « aucune recette », « presque : inversez » ou « au codex ».
  • La liste suit la table. Retirer la brique ou en poser une autre recalcule la liste aussitôt ; les briques glissent vers leur nouvelle place en 240 ms, sans animation sous prefers-reduced-motion.
  • Le gris : fond Sable, libellé en Encre secondaire, sans ombre. Une brique grisée reste jouable, puisque se tromper ne coûte rien. Ce n’est donc ni l’état désactivé (opacité de 40 %) ni l’état épuisé (hachures).
  • Ce qui ne bouge pas : une paire jamais essayée garde l’ordre habituel de la réserve, sans compteur. Seuls passent en fin de liste ce que le joueur sait déjà.
Téléphone Téléphone, nocturne
Réserve, téléphone Réserve, nocturne

Données

  • Table essai : joueur_id, gauche, droite (briques dans l’ordre des cases) et fascicule_juge (le dernier fascicule paru au moment de l’essai). Ni issue, ni date, ni texte du catalogue.
  • Écriture : dans la transaction de POST /fusion, pour un échec ou un « presque » seulement, et seulement si le joueur possède les deux briques. Plafond de 3 000 lignes par joueur.
  • Mots au codex : aucune ligne, le client les déduit de la règle de fusion (prevoir).
  • Oubli : à chaque parution, toutes les lignes s’effacent en bloc, avec un seul message, parce que de vieilles paires peuvent devenir des mots. Une purge paire par paire désignerait les familles que prolonge le fascicule.
  • Portée : la trace suit le compte sur tous ses appareils, part avec la partie quand elle est supprimée, et entre dans l’export.

Piste

Handoff.

  1. ADR (Design) : « Mémoire des essais », qui remplace en partie l’ADR 0027 et met à jour le modèle de données (§ 7).
  2. API :
    • Ajouter une migration essai.
    • Écrire l’essai dans fusion (progression.rs) pour un echec ou un presque, avec un plafond, et l’effacer quand le fascicule le plus récent change.
    • Ajouter Etat.essais ([[gauche, droite]], #[serde(default)]).
    • Inclure les essais dans l’export et dans la réinitialisation.
    • Régénérer openapi.json et .sqlx/.
  3. PWA :
    • Dans web/src/services/jeu.ts, ajouter dejaEssayee(posee, brique, etat), qui utilise prevoir pour les mots connus et Etat.essais pour les échecs.
    • Dans ReserveModale.tsx et Reserve.tsx, ajouter la partition et l’intertitre, avec l’animation FLIP.
    • Dans styles.css, ajouter l’état .is-essayee.
    • Régénérer api.d.ts.
  4. Tests :
    • Côté domaine et API : un essai est écrit pour un échec, rien pour une découverte, rien sans les deux briques, le plafond est respecté, la purge se fait à la parution.
    • Côté PWA : la partition, et l’ordre stable des briques non essayées.

Prototype de référence : la démo « mémoire » de pistes-retention.html.

Critères d’acceptation

  • Après un échec a + b, poser a grise b, la place en fin de réserve et affiche « aucune recette ». Poser b seul ne grise pas a, car l’ordre compte.
  • Un « presque » affiche « presque : inversez », et un mot déjà au codex affiche « au codex ».
  • La trace est tenue par le serveur et persiste après un rechargement et sur un autre appareil du compte.
  • Une nouvelle parution efface toute la trace.
  • Une brique grisée reste posable.
  • L’ordre des briques non grisées est inchangé.
  • Aucun texte du catalogue ni aucune date n’est stocké.
  • À 390 px et 1440 px, en atelier et en nocturne : check_identity sans erreur et animation vérifiée.

Activity

  1. Lunik commented on Oct 24, 2026

    @Lunik
    ContributorAuthor

    Livré par #94, fusionnée dans develop (6576e43), avec l’ADR 0081 (qui remplace en partie l’ADR 0027) et la maquette I-09 de EtymoLogique/Design#51.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions