Files
ki-fwi/ANALYSE-et-PLAN_ki-fwi.md
T
OKIandClaude Opus 5 f0b3ce8484 chore: dépôt initial — sécurisation des documents de cadrage ki-fwi
Aucun code applicatif. Commit de protection avant toute modification
(playbook OKI §5b.1 : git vérifié/initialisé avant tout travail).

Contenu : brief Claude Code, analyse et plan de sessions, données
d'amorçage fruits.seed.json. Le pack de référence OKI
(doc2sveltekit-transition/) reste local et non versionné.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 23:23:21 -04:00

13 KiB
Raw Blame History

KI FWI SA YÉ ? — Analyse du pack, décisions d'architecture et plan de sessions

Document destiné à l'humain (toi). Le fichier BRIEF-CLAUDE-CODE_ki-fwi.md est le prompt à coller dans Claude Code. fruits.seed.json est le jeu de données d'amorçage.

Contexte : ORGANISATION KA INTERNATIONALE · Martinique/Guadeloupe · doctrine souveraineté numérique (playbook unifié OKI × SvelteKit, juillet 2026).


1. Ce que vaut le pack pack_complet_game_fruit

Ce qui est bon et à garder :

  • La taxonomie d'assets en 4 vues (arbre · fruit entier · coupe · feuille) est exactement la bonne découpe pédagogique. C'est le meilleur apport du document : elle correspond aux quatre indices que l'on apprend réellement à lire sur le terrain.
  • Le prompt négatif universel est réutilisable tel quel.
  • L'automatisation par l'API HTTP de ComfyUI (POST /prompt) est la bonne méthode, et elle est compatible avec la doctrine : la génération est une opération hors ligne, au build, jamais au runtime. Aucun appel tiers ne subsiste dans le jeu livré (P2 du playbook : bake au build).

Ce qui est faux, risqué ou manquant — par ordre de gravité :

1.1 La contradiction pédagogique centrale (bloquant)

Le but est que des enfants reconnaissent des fruits et des arbres réels. Un jeu dont 100 % des visuels sont générés par IA leur apprend à reconnaître les hallucinations d'un modèle de diffusion. Le problème est concret : SDXL et FLUX connaissent mal le corossol, à peine la quenette, presque pas le zikak, la pomme-liane ou le cachiman cœur-de-bœuf. Sur les espèces peu représentées dans les jeux d'entraînement, le modèle produit un fruit plausible et faux.

Règle à graver dans le projet — deux filières d'assets, deux régimes :

Filière Contenu Source autorisée Rôle
A — Vérité photo de fruit, de coupe, de feuille, d'écorce, de port de l'arbre photographie réelle (Commons, iNaturalist, herbier, ton propre appareil) tout ce qui sert à identifier : épreuves, fiches, indices
B — Décor fonds, personnages, UI, sprites arcade, badges, écrans de titre IA (Krea2 / FLUX via ComfyUI) tout ce qui ne sert pas à identifier

Un sprite IA peut illustrer le mode arcade (fruits qui tombent), à condition qu'il soit validé contre au moins deux photos réelles et que l'épreuve d'identification, elle, se joue toujours sur la photo. Une photo prise par toi au marché de Fort-de-France vaut mieux que n'importe quel FLUX.

1.2 « Ressources libres de droit » : l'expression est fausse, et c'est un risque juridique réel

  • Wikimedia Commons n'est pas « libre de droit ». La plupart des fichiers sont CC BY-SA 4.0 : attribution nominative obligatoire + partage à l'identique. Le partage à l'identique contamine les œuvres dérivées — si tu composites une photo CC BY-SA dans un sprite, le sprite devient CC BY-SA.
  • TRAMIL : les mentions légales du site n'accordent aucune licence. Par défaut : tous droits réservés. La TRAMILothèque (photos, scans, planches d'herbier, coupes microscopiques) est une ressource magnifique et inutilisable sans autorisation écrite. TRAMIL est hébergé par le SCD de l'Université des Antilles à Schœlcher — tu es à quinze minutes. Va les voir. Un partenariat TRAMIL × OKI sur un jeu scolaire martiniquais est une demande qui a toutes les chances d'aboutir, et il transforme le projet : accès à des images d'herbier vouchées, et une caution scientifique.
  • CIRAD / INRAE : régimes mixtes, majoritairement © avec des cas d'usage pédagogique négociables. Agritrop (dépôt ouvert du CIRAD) contient de l'open access exploitable. À demander, pas à présumer.
  • iNaturalist : beaucoup de CC BY-NC. Compatible avec un jeu gratuit et non commercial ; incompatible si tu veux un jour vendre une version. Décide maintenant.

Décision à prendre avant la première ligne de code : licence du code (AGPL-3.0 ou GPL-3.0), licence du contenu (CC BY-SA 4.0 recommandé, cohérent avec Commons), et registre CREDITS.md + métadonnée de licence par média dans les données, avec un écran de crédits dans le jeu.

1.3 Aucune boucle de validation botanique

Le pack génère 76 images et passe directement à la production. Il faut une porte : chaque asset porte un champ valide qui vaut false par défaut, et rien d'invalidé n'est embarqué dans le build. La validation se fait par comparaison à deux photos de référence, idéalement contresignée par quelqu'un qui connaît (TRAMIL, un enseignant SVT, un agriculteur, ta grand-mère).

1.4 Un bug réel dans le script fourni

workflow["4"]["inputs"]["seed"] = hash(fruit["id"] + asset_type) % 2**32

En Python 3, hash() sur une chaîne est randomisé à chaque exécution (PYTHONHASHSEED). Les seeds ne sont donc pas reproductibles d'un lancement à l'autre — exactement l'inverse de l'argument « même seed = même style » vendu dans le pack. Utiliser zlib.crc32(s.encode()) & 0xFFFFFFFF ou int(hashlib.sha256(s.encode()).hexdigest()[:8], 16).

Accessoirement : json.loads(json.dumps(x))copy.deepcopy(x) ; et vérifier la licence du modèle utilisé par rembg (les poids ne suivent pas toujours la licence MIT du paquet).

1.5 Le format de sortie est hostile au mobile 4G

80 PNG en 512×512 = plusieurs mégaoctets, hors budget du playbook (≤ 2 Mo pour l'entrée). Il faut : AVIF/WebP, atlas de textures par écran de jeu, et chargement par paquet (un pack de fruits par île, téléchargeable et mis en cache par le service worker).

1.6 Ce qui manque entièrement

  • Le son. Un jeu qui enseigne les noms kréyòl sans les faire entendre rate sa cible : les enfants visés lisent mal le kréyòl écrit, dont l'orthographe leur est peu familière. Chaque fruit doit avoir son nom prononcé par une voix humaine locale (pas de TTS). C'est du terrain, pas du code : une après-midi d'enregistrement vaut dix heures de développement.
  • Le game design. Le pack ne parle que d'assets. Il n'y a ni boucle de jeu, ni progression, ni mesure de l'apprentissage.
  • La sécurité. Un jeu antillais sur les fruits qui ne parle pas du mancenillier est incomplet et, à la limite, irresponsable. Idem : akée non mûr, coque de pomme-cajou, graines de médicinier, laurier-jaune. Un module « Pa touché » transforme un jeu sympathique en outil que les écoles ont une raison d'installer.
  • La saisonnalité. Savoir quand un fruit se trouve fait partie de la connaissance perdue, autant que le nom.

2. Décisions d'architecture

2.1 Phaser 5 n'existe pas

La branche courante est Phaser 4 (4.0 « Caladan », avril 2026 ; 4.1 « Salusa » ; 4.2 « Giedi »), avec un moteur WebGL réécrit et une architecture de render nodes. Cibler phaser@^4, vérifier la dernière version publiée au démarrage (npm view phaser version), et ne pas partir de Phaser 3.

2.2 Phaser ne doit pas porter tout le jeu

Trois des cinq modes de jeu (QCV photo, indices progressifs, calendrier) sont des interfaces de cartes et de boutons : Svelte + CSS les fait mieux, plus léger, plus accessible au clavier et au lecteur d'écran. Phaser gagne sa place sur une seule scène : le jaden arcade, où il y a de la physique, des particules et du game feel.

Architecture retenue — hybride, à frontière stricte :

Svelte 5 (coquille)          Phaser 4 (îlot)
├─ routes, i18n, SEO         └─ scène « Ranmasé » uniquement
├─ menus, HUD, album            · montée en import dynamique
├─ fiches encyclopédie          · dans (jeu)/ranmase, jamais au layout racine
├─ données, progression         · détruite au démontage (game.destroy(true))
└─ audio, réglages              · communique par événements, pas par état partagé

Conséquence sur les budgets : le shell reste ≤ 170 Ko JS (règle du playbook, non négociable) ; Phaser (~300400 Ko gzip selon le build) n'est téléchargé qu'à l'entrée dans la scène arcade, derrière un écran de chargement designé (P5). C'est un écart au budget, il doit être documenté comme tel dans un ADR, pas subi.

2.3 WebGL : oui, mais borné

Phaser en mode AUTO (WebGL avec repli canvas), resolution/DPR plafonné à 1.5, powerPreference: 'low-power', cible 30 fps stables sur Mali-G52. Aucun WebGL ailleurs dans le site. Le miroir DOM sémantique de la scène reste obligatoire (ladder §2.8 du playbook).

2.4 Deux produits dans un dépôt

C'est la synthèse qui rend le projet cohérent avec le reste de ton écosystème :

  • /zerbaj/ — l'encyclopédie : une page prérendue par fruit, SSR complet, lisible sans JavaScript, avec JSON-LD, hreflang et le traitement AI-Overview de ton PRD_AI_Overview. C'est ce qui sera trouvé par les moteurs, cité par les assistants, et lu par les enseignants.
  • /je/ — le jeu : PWA hors ligne, aucun compte, aucun tracker, progression en local.

Le jeu déverrouille les fiches ; les fiches ramènent au jeu. Un seul jeu de données pour les deux.

2.5 Hors ligne d'abord

Contrainte réelle : le wifi des écoles. Le jeu doit être entièrement jouable hors ligne après une première visite, et installable. Packs d'assets par île, téléchargés à la demande, Cache-Storage.


3. Le jeu proposé — « KI FWI SA YÉ ? »

Public : 712 ans, Guadeloupe · Martinique · Guyane · Réunion (extensible). Langues : kréyòl en premier (le nom kréyòl est le nom principal, le français est la traduction — c'est un choix politique, pas cosmétique), FR, EN. lang correct partout.

Cinq modes :

  1. Rekonèt — photo réelle → 4 propositions. Répétition espacée façon Leitner (5 boîtes) persistée en local. C'est le cœur : c'est lui qui fait apprendre.
  2. Kaché — indices dévoilés un à un : feuille → écorce → coupe → fruit entier. Score dégressif. Enseigne la lecture botanique, pas la reconnaissance de vignette.
  3. Ranmasé (Phaser) — récolte dans le jaden : cueillir uniquement le fruit demandé, esquiver les plantes dangereuses. Le seul mode d'adresse.
  4. Sézon — placer les fruits sur le calendrier de l'année. Connaissance rare, facile à jouer.
  5. Pa touché — module sécurité : mancenillier, akée non mûr, coque de cajou, médicinier, laurier-jaune. Jamais chronométré, jamais scoré. On n'apprend pas le danger sous pression.

Progression : un album (Lakou) de fiches à débloquer, badges en KA, zéro monnaie, zéro pub, zéro compte, zéro notification. Export de la progression en JSON (utile pour un enseignant).

Le « moment de révélation » (leçon JWE du playbook) : à la bonne réponse — la photo qui se retourne, le nom kréyòl prononcé, le compteur en count-up, la fiche qui s'ajoute à l'album.


4. Plan en 7 sessions

Chaque session se termine par un build vert, un commit et une note de session. Ne pas enchaîner deux sessions sans relire ce qui a été produit.

# Session Livrable Porte de sortie
0 Cadre & données — aucun code applicatif ADR (licences, Phaser 4, hybride, sources), fruits.schema.json, dataset de 8 fruits vérifiés contre Wikidata/GBIF, CREDITS.md, SOURCES.md, lettre-type de demande TRAMIL/CIRAD Le plan est validé par toi avant tout code
1 Socle — SvelteKit 2 + Svelte 5 + TS strict, tokens OKI, thème sombre, fonts self-hébergées, PWA, i18n GCF/FR/EN, /zerbaj/ prérendu avec JSON-LD 8 fiches en ligne, Lighthouse ≥ 90/95/95/95, lisible sans JS
2 Moteur pédagogique en Svelte pur — modes Rekonèt, Kaché, Sézon + Leitner + audio + album Le jeu est déjà amusant sans Phaser. Si non, ne pas passer à la suite
3 Pipeline assets — client ComfyUI (seeds déterministes), porte de validation, AVIF/WebP, atlas, packs par île 0 asset non validé dans le build, ≤ 2 Mo à l'entrée
4 Ranmasé (Phaser 4) + module Pa touché Phaser absent du bundle initial, 30 fps sur mobile d'entrée de gamme, miroir DOM
5 Contenu — 24 fruits + 5 plantes dangereuses, audio kréyòl enregistré, relecture orthographique kréyòl Contenu validé par une personne compétente, pas par un modèle
6 Finition — perf, a11y, DoD §8, .htaccess/_headers, déploiement, crédits, tag, push Gitea DoD intégralement vraie

Test en classe entre la 5 et la 6. Six enfants, trente minutes, tu regardes sans intervenir. C'est la seule mesure qui compte, et elle invalidera une partie de ce document — tant mieux.


5. Ce qui ne se délègue pas à Claude Code

  • Aller voir TRAMIL à Schœlcher.
  • Enregistrer les voix kréyòl.
  • Photographier les fruits qui manquent sur Commons (il en manquera).
  • Faire relire l'orthographe kréyòl par un humain (GEREC-F ou l'usage local — et l'orthographe gwadloupéyen et matinitjé diffèrent : choisir, documenter, ne pas mélanger).
  • Le test en classe.

Le code est la partie facile.