Skip to content

feat: niveau 3 — la division avec reste (specs §12 + implémentation) - #71

Merged
isc merged 4 commits into
mainfrom
specs-niveau-3-division-avec-reste
Jul 25, 2026
Merged

feat: niveau 3 — la division avec reste (specs §12 + implémentation)#71
isc merged 4 commits into
mainfrom
specs-niveau-3-division-avec-reste

Conversation

@isc

@isc isc commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Quoi

Trois commits :

  1. Specs : nouveau chapitre §12 « Niveau 3 — La division avec reste » dans public/specs/index.html (renumérotation : Multi-profils → §13, Évolutions → §14, Références → §15 ; renvois §4.2/§7.1/§9 ; v1.4).
  2. Implémentation complète du niveau, en miroir strict du niveau 2 (division exacte).
  3. Guide utilisateur : section « Niveau 3 » (fr/en) dans le générateur.

Le niveau 3 en bref

Une fois les 8 badges « Divisions par N » acquis, la séance du jour devient la division avec reste (« 45 ÷ 7 = 6, reste 3 ») — le geste d'encadrement par les multiples, attendu fin CE2 / CM1, troisième porte de retrieval sur le même réseau multiplicatif. Invisible avant déblocage.

Implémentation

  • Modèle : RemainderFact = une zone (diviseur, quotient) — 64 entrées Leitner en bijection avec la grille 8×8. Le reste est tiré au sort à chaque révision (0..d−1, le cas 0 garde vivante la discrimination « ça tombe juste ») ; l'intro utilise un reste canonique déterministe (max(1, ⌊d/2⌋)) pour coller aux MP3 pré-générés.
  • Moteur : remainderComposer (gate per-zone : division exacte parente en boîte 4+, même assouplissement anti-deadlock que le niveau 2), dailyComposer refactoré en assemble() commun avec entretien ×/÷ intégré (cap 6, régime de croisière ≈ 5 dus/jour), padding bonus rem → div → mult.
  • Déblocage : isRemainderUnlocked (8 badges « Divisions par N », permanent) + activeLevel(profile) partagé ; carte de récap « Tu débloques la division avec reste ! ».
  • Saisie en deux temps (SessionScreen) : « Combien de fois ? » puis « Il reste combien ? », court-circuit si le quotient est faux, feedback ciblé par étape avec égalité euclidienne, seuils 8 s / 6 s, NumPad re-keyé et VoiceInput re-tokené par étape, temps mesuré de l'affichage à la validation du reste.
  • Visuel : DotGrid étendu (remainderDots — la rangée corail « qui ne rentre pas »), RemainderStrategyHint (équation d'encadrement 7 × ☐ ≤ 45), 3ᵉ image mystère (thème distinct des deux autres), grille Leitner parent, 3ᵉ onglet Progression + dashboard (descripteur de niveau unique + onglets en tabs.map), faits difficiles unifiés ×/÷/reste.
  • Badges : 🥉 Premier reste maîtrisé, ÷Nʳ ×8, 👑 Grand maître de la division — masqués avant déblocage.
  • i18n fr/en complet ; TTS : nouvelles clés (qr-* par dividende, intror-* par zone, invites statiques) dans generate-tts.mjs — les MP3 seront générés via gh workflow run generate-tts.yml après merge (l'audio manquant est ignoré silencieusement en attendant).
  • Migration : backfill remainderFacts/remainderMysteryTheme sur les profils existants, validation d'import.
  • Changelog in-app (23/07/2026).

Vérification

  • tsc -b + 251 tests vitest verts, dont 4 nouveaux fichiers (composer, badges, daily, parcours d'intégration complet avec saisie en deux temps).
  • Vérifié en vrai navigateur (Playwright/Chromium, profil niveau 3 seedé) : intro de zone (grille + points du reste + astuce), saisie deux temps, feedback « 5 ÷ 2 = 2, reste 1 », séance mixte avec entretien des divisions exactes.
  • Revue /simplify 4 angles passée, fixes appliqués (helpers activeLevel/remainderZoneBounds/itemDisplay partagés, descripteur ParentDashboard, dédup getFactKey).

Après merge

  • Guide utilisateur : section « Niveau 3 » ajoutée (fr/en) dans generate-user-guide.mjs — le guide est régénéré automatiquement par le workflow de déploiement, validé en local sur les deux langues.

  • gh workflow run generate-tts.yml pour générer les ~480 MP3/langue du niveau 3.

🤖 Generated with Claude Code

Spécifie l'évolution naturelle après la complétion de l'image mystère
des divisions : l'encadrement par les multiples (45 ÷ 7 = 6, reste 3),
aligné sur les attendus CE2/CM1. Statut : spécifié, non implémenté.
Renumérote les chapitres suivants (profils 13, évolutions 14, refs 15).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Preview supprimée (PR fermée). Les URLs ne sont plus accessibles.

Troisième porte de retrieval sur le réseau multiplicatif : 64 zones
(diviseur, quotient) en Leitner, reste tiré au sort à chaque révision
(canonique à l'intro pour coller aux MP3), déblocage sur les 8 badges
« Divisions par N », saisie en deux temps (quotient puis reste) avec
feedback ciblé par étape, 3e image mystère, badges dédiés (🥉 / ÷Nʳ / 👑),
entretien × et ÷ intégré à la séance unique (cap 6), dashboard parent à
3 onglets, faits difficiles unifiés, i18n fr/en, clés TTS (génération
des MP3 via le workflow après merge), changelog, et specs passées en
« implémenté ». 4 nouveaux fichiers de tests (composer, badges, daily,
parcours intégration avec saisie deux temps) — 251 tests verts.
Vérifié en vrai navigateur (Playwright) : intro de zone, deux temps,
feedback, séance mixte avec entretien des divisions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@isc isc changed the title docs(specs): niveau 3 — la division avec reste (chapitre 12) feat: niveau 3 — la division avec reste (specs §12 + implémentation) Jul 23, 2026
isc and others added 2 commits July 23, 2026 23:30
Nouveau profil seed niveau 3 (divisions en boîte 5 + badges « Divisions
par N » — sans re-pousser table-2 déjà présent dans le profil d'exemple,
le comptage de déblocage étant strict à 8) et séquence de capture :
intro de zone (attente de la rangée du reste révélée), saisie en deux
temps (étape « Il reste combien ? »), 3e image mystère, dashboard à
trois onglets. Le guide est régénéré par le workflow de déploiement ;
validé en local sur les deux langues.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… encre douce

Le corail se lisait comme un signal d'erreur dans la formule (il reste
réservé aux points du reste dans la grille), et l'espace typographique
du ::before était illisible à 0.45em — remplacé par des marges explicites.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@isc
isc merged commit d9bbed8 into main Jul 25, 2026
2 checks passed
@isc
isc deleted the specs-niveau-3-division-avec-reste branch July 25, 2026 07:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant