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>
This commit is contained in:
+28
@@ -0,0 +1,28 @@
|
|||||||
|
# Dépendances
|
||||||
|
node_modules/
|
||||||
|
.pnpm-store/
|
||||||
|
|
||||||
|
# Build SvelteKit
|
||||||
|
.svelte-kit/
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
.vercel/
|
||||||
|
.output/
|
||||||
|
|
||||||
|
# Environnement
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
|
# Outils
|
||||||
|
.DS_Store
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
.vite/
|
||||||
|
|
||||||
|
# Pack de référence OKI — document local, non versionné (playbook §0)
|
||||||
|
doc2sveltekit-transition/
|
||||||
|
|
||||||
|
# Pipeline assets (filière B) — sorties intermédiaires ComfyUI
|
||||||
|
tools/assets/.venv/
|
||||||
|
tools/assets/out/
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
```python
|
||||||
|
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 (~300–400 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 :** 7–12 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.
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
# MISSION : créer « KI FWI SA YÉ ? » selon le PLAYBOOK UNIFIÉ OKI × SVELTEKIT
|
||||||
|
|
||||||
|
> **Mode d'emploi.** Colle ce fichier entier dans Claude Code, en joignant :
|
||||||
|
> `playbook-oki-sveltekit.md` (méthode + marque, **fait autorité**), `AGENTS.md`,
|
||||||
|
> `svelte_core_bestpractices.md`, `PRD_AI_Overview_SEO_Recommandations.md`,
|
||||||
|
> `pack_complet_game_fruit.txt` (matière première, **à corriger, pas à appliquer tel quel**),
|
||||||
|
> `fruits.seed.json` (données d'amorçage), `GITEA.md` (déploiement).
|
||||||
|
> Ajuste « Périmètre de cette session » (§6) à chaque nouvelle session.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Tu es un agent de code senior. Tu construis un **jeu éducatif libre** qui apprend aux enfants des
|
||||||
|
Antilles à reconnaître les fruits, les arbres et les plantes de leurs îles.
|
||||||
|
|
||||||
|
Le `playbook-oki-sveltekit.md` fait autorité : la marque (§1) prime pour couleurs, typographie, voix
|
||||||
|
et iconographie ; la méthode (§2) prime pour la technique ; les budgets (§2.7) et l'accessibilité
|
||||||
|
(§2.8) ne se négocient jamais. Les conventions Svelte 5 du §3 sont obligatoires. Ce brief ne
|
||||||
|
remplace le playbook nulle part : il le spécialise.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Contexte
|
||||||
|
|
||||||
|
- **Projet :** `ki-fwi` — nouveau dépôt, création *ex nihilo* (type de mission **B** du playbook §0).
|
||||||
|
- **Porteur :** ORGANISATION KA INTERNATIONALE (o-k-i.net), Martinique/Guadeloupe.
|
||||||
|
- **Problème :** une partie des enfants antillais ne sait plus nommer ni reconnaître les fruits de
|
||||||
|
leur île, ni les arbres qui les portent. Le jeu vise à restituer cette connaissance.
|
||||||
|
- **Public :** 7–12 ans, lecture parfois fragile, téléphone Android d'entrée de gamme, 4G ou wifi
|
||||||
|
d'école instable. Le jeu doit être **jouable hors ligne** et **installable**.
|
||||||
|
- **Positionnement :** logiciel libre, aucun compte, aucune publicité, aucun tracker, aucune requête
|
||||||
|
vers un domaine tiers au runtime.
|
||||||
|
|
||||||
|
## 2. Règle n°1 du projet — la vérité visuelle
|
||||||
|
|
||||||
|
Le jeu enseigne la reconnaissance du réel. **Deux filières d'assets, régimes séparés, jamais
|
||||||
|
mélangés :**
|
||||||
|
|
||||||
|
- **Filière A — Vérité.** Photographies réelles (Wikimedia Commons, iNaturalist, herbiers,
|
||||||
|
photos du porteur). **Seule** filière autorisée pour tout ce qui sert à identifier : épreuves de
|
||||||
|
reconnaissance, indices (feuille, écorce, coupe, port de l'arbre), fiches encyclopédiques.
|
||||||
|
- **Filière B — Décor.** Images générées par IA (ComfyUI/Krea2/FLUX) : fonds, personnages, sprites
|
||||||
|
du mode arcade, badges, écrans de titre, iconographie. **Jamais** une épreuve d'identification.
|
||||||
|
|
||||||
|
Tout média porte un champ `valide` (booléen, `false` par défaut) et un champ `source`. **Le build
|
||||||
|
échoue si un média non validé est référencé par une épreuve.** Écris ce contrôle comme un script de
|
||||||
|
build, pas comme une consigne.
|
||||||
|
|
||||||
|
Justification, à ne pas oublier : les modèles de diffusion connaissent mal le corossol, à peine la
|
||||||
|
quenette, presque pas le zikak ou le cachiman. Ils produisent des fruits plausibles et faux. Un jeu
|
||||||
|
d'identification bâti sur des assets IA apprend l'erreur.
|
||||||
|
|
||||||
|
## 3. Règle n°2 — les licences
|
||||||
|
|
||||||
|
Rien n'est « libre de droit ». Avant d'embarquer le moindre média :
|
||||||
|
|
||||||
|
- **Wikimedia Commons** : majoritairement CC BY-SA 4.0 → attribution nominative **et** partage à
|
||||||
|
l'identique, qui contamine les dérivés. Récupérer auteur, licence, URL du fichier, URL de la page
|
||||||
|
de description, et les stocker par média dans les données.
|
||||||
|
- **iNaturalist** : souvent CC BY-**NC**. Acceptable pour un jeu non commercial ; à signaler
|
||||||
|
explicitement dans `CREDITS.md` et dans l'ADR de licence.
|
||||||
|
- **TRAMIL** (tramil.net) : **aucune licence accordée** dans ses mentions légales → tous droits
|
||||||
|
réservés. Utilisable comme **source de vérification factuelle** citée en référence, **jamais**
|
||||||
|
comme source de fichiers. Rédige une lettre-type de demande d'autorisation que le porteur enverra.
|
||||||
|
- **CIRAD / INRAE** : régimes mixtes. Même traitement : vérification et demande, pas présomption.
|
||||||
|
- **Wikidata / GBIF** : à utiliser pour la taxonomie (Q-id, clé GBIF, nom scientifique accepté,
|
||||||
|
famille) — c'est la colonne vertébrale factuelle du dataset.
|
||||||
|
|
||||||
|
Livrables associés : `LICENSE` (code : **AGPL-3.0-or-later**), `LICENSE-CONTENT` (contenu :
|
||||||
|
**CC BY-SA 4.0**), `CREDITS.md` généré depuis les données, et un écran de crédits dans le jeu.
|
||||||
|
Si un conflit de licence apparaît (NC vs commercial, SA vs compositing), **arrête-toi et demande**.
|
||||||
|
|
||||||
|
## 4. Stack
|
||||||
|
|
||||||
|
Défaut = §2.3 du playbook, avec ces précisions et ces écarts explicites :
|
||||||
|
|
||||||
|
```
|
||||||
|
SvelteKit 2 + Svelte 5 (runes) + TypeScript strict
|
||||||
|
@sveltejs/adapter-static, prerender intégral, trailingSlash 'always'
|
||||||
|
CSS vanilla : oki-tokens.css + base.css (pas de Tailwind)
|
||||||
|
vite-imagetools (AVIF/WebP responsive), vite-plugin-pwa (shell + packs hors ligne)
|
||||||
|
@fontsource → woff2 self-hébergés dans static/fonts/
|
||||||
|
phaser@^4 ← ÉCART DOCUMENTÉ, voir ci-dessous
|
||||||
|
```
|
||||||
|
|
||||||
|
**Phaser 5 n'existe pas.** La branche courante est **Phaser 4** (4.0 « Caladan », avril 2026 ;
|
||||||
|
4.1 « Salusa » ; 4.2 « Giedi »), moteur WebGL réécrit en *render nodes*. Vérifie la dernière version
|
||||||
|
publiée (`npm view phaser version`) avant d'installer. Ne pars pas de Phaser 3.
|
||||||
|
|
||||||
|
**Frontière stricte Svelte / Phaser :**
|
||||||
|
|
||||||
|
- Svelte porte la coquille : routes, i18n, SEO, menus, HUD, album, fiches, données, progression,
|
||||||
|
audio, réglages, et **trois des cinq modes de jeu** (Rekonèt, Kaché, Sézon) en DOM/CSS pur.
|
||||||
|
- Phaser porte **une seule scène** : le mode arcade « Ranmasé ». Montée par import dynamique dans
|
||||||
|
`(jeu)/ranmase`, jamais au layout racine, détruite au démontage (`game.destroy(true)`),
|
||||||
|
communication par événements — pas d'état Svelte partagé par frame.
|
||||||
|
- Rendu `AUTO` (WebGL, repli canvas), DPR plafonné à **1.5**, `powerPreference: 'low-power'`,
|
||||||
|
cible 30 fps stables sur Mali-G52.
|
||||||
|
- **Miroir DOM sémantique** obligatoire pour la scène (playbook §2.8, point 4).
|
||||||
|
|
||||||
|
**Budgets :** le shell reste **≤ 170 Ko JS gzip** (non négociable). Phaser n'est téléchargé qu'à
|
||||||
|
l'entrée dans la scène arcade, derrière un écran de chargement designé (P5). Consigne cet écart dans
|
||||||
|
`docs/adr/0002-phaser-hors-budget-initial.md` : mesure réelle, justification, condition de
|
||||||
|
réexamen. Entrée du site ≤ 2 Mo, LCP < 2,5 s, INP < 200 ms, CLS < 0,05.
|
||||||
|
|
||||||
|
## 5. Architecture produit — deux faces, un dataset
|
||||||
|
|
||||||
|
- **`/zerbaj/`** — l'encyclopédie. Une page prérendue par fruit et par plante, **lisible sans
|
||||||
|
JavaScript**, JSON-LD, hreflang, traitement conforme à `PRD_AI_Overview_SEO_Recommandations.md`.
|
||||||
|
C'est la face indexable et citable du projet.
|
||||||
|
- **`/je/`** — le jeu. PWA, hors ligne, sans compte, progression locale (`localStorage` +
|
||||||
|
Cache-Storage), export/import de la progression en JSON.
|
||||||
|
|
||||||
|
Le jeu déverrouille les fiches ; les fiches renvoient au jeu. **Un seul jeu de données** alimente les
|
||||||
|
deux : `src/lib/data/fruits/*.json` validés par `fruits.schema.json` à chaque build.
|
||||||
|
|
||||||
|
**Langues :** le **kréyòl est la langue principale** — le nom kréyòl est le nom du fruit, le français
|
||||||
|
est sa traduction (choix assumé, à ne pas inverser). Routes `/` (GCF), `/fr/`, `/en/`. Routeur par
|
||||||
|
dossiers + catalogues JSON, pas de middleware (playbook §5b.7). Attribut `lang` correct partout.
|
||||||
|
L'orthographe kréyòl **n'est pas de ton ressort** : signale toute incertitude dans un fichier
|
||||||
|
`docs/kreyol-a-relire.md` au lieu de trancher.
|
||||||
|
|
||||||
|
## 6. Les cinq modes
|
||||||
|
|
||||||
|
1. **Rekonèt** — photo réelle → 4 propositions. Répétition espacée (Leitner, 5 boîtes) persistée en
|
||||||
|
local. C'est le mode qui fait apprendre : soigne-le en premier.
|
||||||
|
2. **Kaché** — indices dévoilés un à un : feuille → écorce → coupe → fruit entier, score dégressif.
|
||||||
|
3. **Ranmasé** — arcade Phaser : récolter le fruit demandé, éviter les plantes dangereuses.
|
||||||
|
4. **Sézon** — placer les fruits sur le calendrier annuel de l'île sélectionnée.
|
||||||
|
5. **Pa touché** — module sécurité : mancenillier, akée non mûr, coque de pomme-cajou, médicinier,
|
||||||
|
laurier-jaune. **Jamais chronométré, jamais scoré, jamais transformé en épreuve d'adresse.** Ton
|
||||||
|
sobre et factuel : on n'apprend pas le danger sous pression. Aucun visuel anxiogène.
|
||||||
|
|
||||||
|
**Moment de révélation** à la bonne réponse (leçon JWE du playbook §5b.12) : retournement de la
|
||||||
|
photo, **nom kréyòl prononcé**, score en count-up (rAF → écriture DOM directe, span animé
|
||||||
|
`aria-hidden` + valeur finale en `.sr-only` dans une région `aria-live`), fiche ajoutée à l'album.
|
||||||
|
|
||||||
|
**Audio :** chaque fruit a un fichier de prononciation kréyòl. **Pas de synthèse vocale.** Les
|
||||||
|
enregistrements seront fournis par le porteur ; prévois le contrat (`audio.gcf`, format `.opus`,
|
||||||
|
repli silencieux si le fichier manque) et un script de vérification listant les enregistrements
|
||||||
|
manquants.
|
||||||
|
|
||||||
|
**Accessibilité :** cibles tactiles ≥ 44 px, navigation clavier complète, aucun mode chronométré en
|
||||||
|
découverte, contraste AA sur le thème sombre, `prefers-reduced-motion` en gate unique au provider.
|
||||||
|
|
||||||
|
## 7. Pipeline d'assets IA (filière B uniquement)
|
||||||
|
|
||||||
|
Reprends le pack `pack_complet_game_fruit.txt` en corrigeant ses défauts :
|
||||||
|
|
||||||
|
- **Seeds déterministes** : `hash()` de Python est randomisé par exécution (`PYTHONHASHSEED`) — les
|
||||||
|
seeds du script fourni ne sont pas reproductibles, contrairement à ce qu'il annonce. Utilise
|
||||||
|
`zlib.crc32(clé.encode()) & 0xFFFFFFFF`. `copy.deepcopy` au lieu de `json.loads(json.dumps(...))`.
|
||||||
|
- **Sortie** : AVIF/WebP + atlas de textures par écran, jamais 80 PNG 512×512 en vrac. Packs par île.
|
||||||
|
- **Porte de validation** : chaque asset généré est comparé à ≥ 2 photos réelles ; `valide: false`
|
||||||
|
tant qu'un humain n'a pas tranché ; le build refuse tout asset non validé.
|
||||||
|
- **Licence du modèle `rembg`** : vérifie la licence des **poids**, pas seulement du paquet.
|
||||||
|
- ComfyUI est piloté **hors ligne, au build** (P2). Aucun appel réseau ne subsiste au runtime.
|
||||||
|
- Le script vit dans `tools/assets/`, hors du bundle, avec son propre `requirements.txt`.
|
||||||
|
|
||||||
|
## 8. Périmètre de CETTE session
|
||||||
|
|
||||||
|
> **Session 0 — Cadre et données. Aucun code applicatif.**
|
||||||
|
|
||||||
|
- [ ] `git init` + premier commit **avant toute autre action** (playbook §5b.1).
|
||||||
|
- [ ] Audit des sources : pour chacune (Commons, Wikidata, GBIF, iNaturalist, TRAMIL, CIRAD, INRAE),
|
||||||
|
une fiche courte : ce qu'on y prend, sous quelle licence, avec quelle contrainte, comment on
|
||||||
|
l'interroge. Rapport dans `docs/audit-sources.md`.
|
||||||
|
- [ ] ADR dans `docs/adr/` : 0001 licences · 0002 Phaser 4 hors budget initial · 0003 frontière
|
||||||
|
Svelte/Phaser · 0004 filières A/B des assets · 0005 kréyòl langue principale.
|
||||||
|
- [ ] `fruits.schema.json` (JSON Schema) + validateur exécutable en `npm run validate:data`.
|
||||||
|
- [ ] Dataset de **8 fruits**, chaque champ taxonomique **vérifié contre Wikidata et GBIF** (pas
|
||||||
|
contre ta mémoire) : nom scientifique accepté, famille, Q-id, clé GBIF, plus ≥ 2 photos
|
||||||
|
Commons par fruit avec auteur, licence et URL. Point de départ : `fruits.seed.json`, dont
|
||||||
|
**tout est à vérifier**, y compris l'orthographe kréyòl.
|
||||||
|
- [ ] `SOURCES.md`, `CREDITS.md` (généré), `LICENSE`, `LICENSE-CONTENT`.
|
||||||
|
- [ ] Lettre-type de demande d'autorisation TRAMIL et CIRAD (`docs/courriers/`).
|
||||||
|
- [ ] `docs/plan.md` : le plan des sessions 1 à 6 avec, pour chacune, sa porte de sortie mesurable.
|
||||||
|
|
||||||
|
**Ne commence à coder l'application qu'après validation explicite du plan par le porteur.**
|
||||||
|
|
||||||
|
## 9. Méthode de travail
|
||||||
|
|
||||||
|
- Vérifie `git` en premier, toujours (playbook §5b.1).
|
||||||
|
- Présente le plan **avant** d'écrire quoi que ce soit d'autre, et attends la validation.
|
||||||
|
- Après tout composant Svelte modifié : `npx @sveltejs/mcp svelte-autofixer <fichier>` jusqu'à
|
||||||
|
silence, puis `npm run check` à **0 erreur / 0 warning** avant tout commit (playbook §3).
|
||||||
|
- Aucune dépendance installée sans être importée et utilisée.
|
||||||
|
- Les données priment sur ce brief. Si `fruits.seed.json` ou Wikidata contredisent une affirmation
|
||||||
|
écrite ici, **les données gagnent** — signale l'écart, ne le corrige pas en silence.
|
||||||
|
- Si une décision engage le juridique, la pédagogie ou la sécurité des enfants : **arrête-toi et
|
||||||
|
demande**. Ce sont les trois domaines où une erreur ne se rattrape pas par un correctif.
|
||||||
|
|
||||||
|
## 10. Critères d'acceptation
|
||||||
|
|
||||||
|
- La DoD §8 du playbook est intégralement vraie, **plus** :
|
||||||
|
- [ ] Zéro requête tierce au runtime (onglet réseau, sur build de production).
|
||||||
|
- [ ] Chaque média porte source, auteur, licence, URL — vérifié par script.
|
||||||
|
- [ ] Aucune épreuve d'identification ne s'appuie sur un asset IA.
|
||||||
|
- [ ] Le jeu est entièrement jouable hors ligne après une première visite.
|
||||||
|
- [ ] `/zerbaj/` est lisible et complet avec JavaScript désactivé.
|
||||||
|
- [ ] Bundle initial ≤ 170 Ko gzip, Phaser exclu du chemin critique et mesuré à part.
|
||||||
|
- [ ] Lighthouse mobile ≥ 90/95/95/95 sur l'accueil et sur une fiche.
|
||||||
|
- [ ] Navigation clavier complète sur les cinq modes, `prefers-reduced-motion` vérifié à la main.
|
||||||
|
- [ ] Le module « Pa touché » a été relu par un humain avant livraison.
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
{
|
||||||
|
"$comment": "AMORÇAGE — TOUT EST À VÉRIFIER. Les noms scientifiques, familles, saisons et surtout l'orthographe kréyòl doivent être confirmés contre Wikidata, GBIF et un locuteur kréyòl avant usage. Les champs medias/audio sont volontairement vides : ils se remplissent par le pipeline d'ingestion Commons, pas à la main.",
|
||||||
|
"version": "0.1.0-seed",
|
||||||
|
"orthographe_kreyol": {
|
||||||
|
"norme": "À TRANCHER — GEREC-F ou usage local. L'orthographe gwadloupéyen et matinitjé diffèrent sur plusieurs entrées ci-dessous. Choisir, documenter dans un ADR, ne pas mélanger.",
|
||||||
|
"relecteur": null
|
||||||
|
},
|
||||||
|
"fruits": [
|
||||||
|
{
|
||||||
|
"id": "kowosol",
|
||||||
|
"noms": { "gcf": "kowosòl", "fr": "corossol", "en": "soursop", "es": "guanábana" },
|
||||||
|
"taxon": { "scientifique": "Annona muricata", "famille": "Annonaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf"],
|
||||||
|
"saison_mois": [7, 8, 9, 10, 11],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": null,
|
||||||
|
"indices": {
|
||||||
|
"feuille": "simple, alterne, oblongue, vert foncé luisant dessus, odeur forte au froissement",
|
||||||
|
"ecorce": "grisâtre, fissurée avec l'âge",
|
||||||
|
"port": "petit arbre 4–8 m, houppier peu dense",
|
||||||
|
"coupe": "chair blanche fibreuse, nombreuses graines noires luisantes"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "kenet",
|
||||||
|
"noms": { "gcf": "kénèt", "fr": "quenette", "en": "Spanish lime", "es": "mamoncillo" },
|
||||||
|
"taxon": { "scientifique": "Melicoccus bijugatus", "famille": "Sapindaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq"],
|
||||||
|
"saison_mois": [6, 7, 8, 9],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": { "niveau": "vigilance", "note": "noyau volumineux — risque d'étouffement chez le jeune enfant. À mentionner sobrement." },
|
||||||
|
"indices": {
|
||||||
|
"feuille": "composée paripennée, 2 paires de folioles",
|
||||||
|
"ecorce": "lisse, grise",
|
||||||
|
"port": "grand arbre pouvant dépasser 20 m",
|
||||||
|
"coupe": "pulpe orangée gélatineuse autour d'un gros noyau"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "gouyav",
|
||||||
|
"noms": { "gcf": "gouyav", "fr": "goyave", "en": "guava", "es": "guayaba" },
|
||||||
|
"taxon": { "scientifique": "Psidium guajava", "famille": "Myrtaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf", "re"],
|
||||||
|
"saison_mois": [8, 9, 10, 11, 12],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": null,
|
||||||
|
"indices": {
|
||||||
|
"feuille": "opposée, ovale, nervures secondaires très marquées en creux",
|
||||||
|
"ecorce": "lisse, se desquamant en plaques, brun-vert clair — indice très reconnaissable",
|
||||||
|
"port": "arbuste 3–8 m, tronc souvent tortueux",
|
||||||
|
"coupe": "chair rose ou blanche, nombreuses petites graines dures"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pom-site",
|
||||||
|
"noms": { "gcf": "pòm-sitè", "fr": "prune de Cythère", "en": "ambarella", "es": "jobo indio" },
|
||||||
|
"taxon": { "scientifique": "Spondias dulcis", "famille": "Anacardiaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf"],
|
||||||
|
"saison_mois": [11, 12, 1, 2, 3],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": null,
|
||||||
|
"indices": {
|
||||||
|
"feuille": "composée imparipennée, folioles nombreuses, caduque en saison sèche",
|
||||||
|
"ecorce": "grise, lenticelles visibles",
|
||||||
|
"port": "arbre 8–15 m, branches cassantes",
|
||||||
|
"coupe": "chair jaune croquante, noyau fibreux épineux caractéristique"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "zikak",
|
||||||
|
"noms": { "gcf": "zikak", "fr": "icaque", "en": "cocoplum", "es": "icaco" },
|
||||||
|
"taxon": { "scientifique": "Chrysobalanus icaco", "famille": "Chrysobalanaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf"],
|
||||||
|
"saison_mois": [8, 9, 10, 11],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": null,
|
||||||
|
"indices": {
|
||||||
|
"feuille": "petite, arrondie, coriace, vert brillant — plante de bord de mer",
|
||||||
|
"ecorce": "brun-gris, arbuste buissonnant",
|
||||||
|
"port": "arbuste 1–3 m, littoral et arrière-plage",
|
||||||
|
"coupe": "chair blanche cotonneuse peu juteuse, gros noyau côtelé"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pom-kannel",
|
||||||
|
"noms": { "gcf": "pòm-kannèl", "fr": "pomme-cannelle", "en": "sugar apple", "es": "anón" },
|
||||||
|
"taxon": { "scientifique": "Annona squamosa", "famille": "Annonaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq"],
|
||||||
|
"saison_mois": [8, 9, 10, 11],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": { "niveau": "vigilance", "note": "graines des Annona non comestibles — ne jamais croquer." },
|
||||||
|
"indices": {
|
||||||
|
"feuille": "alterne, oblongue, plus fine et plus claire que le corossol",
|
||||||
|
"ecorce": "grise, rameaux zigzagants",
|
||||||
|
"port": "petit arbre 3–6 m",
|
||||||
|
"coupe": "chair blanche en segments détachables, graines noires"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "fwiyapen",
|
||||||
|
"noms": { "gcf": "fwiyapen", "fr": "fruit à pain", "en": "breadfruit", "es": "fruta del pan" },
|
||||||
|
"taxon": { "scientifique": "Artocarpus altilis", "famille": "Moraceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf", "re"],
|
||||||
|
"saison_mois": [7, 8, 9, 10, 11, 12],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": null,
|
||||||
|
"indices": {
|
||||||
|
"feuille": "très grande, profondément lobée — la plus reconnaissable de toutes",
|
||||||
|
"ecorce": "grise, latex blanc à l'entaille",
|
||||||
|
"port": "grand arbre 15–25 m, houppier large",
|
||||||
|
"coupe": "chair blanc-crème dense, se cuisine, ne se mange pas cru"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pom-dlo",
|
||||||
|
"noms": { "gcf": "pòm-dlo", "fr": "pomme d'eau", "en": "water apple", "es": "manzana de agua" },
|
||||||
|
"taxon": { "scientifique": "Syzygium samarangense", "famille": "Myrtaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf", "re"],
|
||||||
|
"saison_mois": [4, 5, 6, 7],
|
||||||
|
"comestible": true,
|
||||||
|
"danger": null,
|
||||||
|
"indices": {
|
||||||
|
"feuille": "opposée, grande, coriace, sessile ou presque",
|
||||||
|
"ecorce": "brun clair, s'écaillant",
|
||||||
|
"port": "arbre 5–15 m",
|
||||||
|
"coupe": "chair blanche très aqueuse, cavité centrale creuse"
|
||||||
|
},
|
||||||
|
"$comment": "ATTENTION : « pòm-dlo », « pòm-malaka » et « pòm-rose » désignent des Syzygium DIFFÉRENTS selon les îles (S. samarangense, S. malaccense, S. jambos). Point de confusion classique — à trancher explicitement avant publication.",
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"plantes_dangereuses": [
|
||||||
|
{
|
||||||
|
"id": "mansiniye",
|
||||||
|
"noms": { "gcf": "mansiniyé", "fr": "mancenillier", "en": "manchineel", "es": "manzanillo" },
|
||||||
|
"taxon": { "scientifique": "Hippomane mancinella", "famille": "Euphorbiaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq"],
|
||||||
|
"danger": {
|
||||||
|
"niveau": "critique",
|
||||||
|
"resume": "Ne jamais toucher, ne jamais manger le fruit, ne jamais s'abriter dessous sous la pluie, ne jamais brûler le bois.",
|
||||||
|
"signalement": "Arbres marqués d'une bande de peinture rouge sur le littoral en Martinique et en Guadeloupe.",
|
||||||
|
"conduite": "En cas de contact : rincer abondamment à l'eau, consulter."
|
||||||
|
},
|
||||||
|
"indices": {
|
||||||
|
"feuille": "petite, ovale, luisante, nervure médiane jaune, souvent une glande à la base du limbe",
|
||||||
|
"port": "arbre du bord de mer, houppier étalé",
|
||||||
|
"fruit": "petite pomme verte à jaunâtre, d'aspect appétissant — c'est là tout le danger"
|
||||||
|
},
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ake",
|
||||||
|
"noms": { "gcf": "aki", "fr": "akée", "en": "ackee", "es": "seso vegetal" },
|
||||||
|
"taxon": { "scientifique": "Blighia sapida", "famille": "Sapindaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf"],
|
||||||
|
"danger": {
|
||||||
|
"niveau": "critique",
|
||||||
|
"resume": "Comestible UNIQUEMENT ouvert naturellement et mûr, et seulement la partie charnue claire. Le fruit non mûr et les graines sont toxiques (hypoglycine).",
|
||||||
|
"conduite": "Ne jamais forcer un fruit fermé. En cas d'ingestion suspecte : urgences."
|
||||||
|
},
|
||||||
|
"indices": { "fruit": "capsule rouge-orangé qui s'ouvre en trois valves à maturité, graines noires brillantes" },
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pom-kajou",
|
||||||
|
"noms": { "gcf": "pòm-kajou", "fr": "pomme-cajou", "en": "cashew apple", "es": "marañón" },
|
||||||
|
"taxon": { "scientifique": "Anacardium occidentale", "famille": "Anacardiaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf"],
|
||||||
|
"danger": {
|
||||||
|
"niveau": "eleve",
|
||||||
|
"resume": "La pomme se mange. La coque de la noix contient un liquide caustique qui brûle la peau et les muqueuses. Ne jamais ouvrir ni mordre la noix crue."
|
||||||
|
},
|
||||||
|
"indices": { "fruit": "pomme charnue jaune ou rouge surmontée d'une noix recourbée grise" },
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "medisinye",
|
||||||
|
"noms": { "gcf": "medsinyé", "fr": "médicinier", "en": "physic nut", "es": "piñón" },
|
||||||
|
"taxon": { "scientifique": "Jatropha curcas", "famille": "Euphorbiaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf"],
|
||||||
|
"danger": {
|
||||||
|
"niveau": "eleve",
|
||||||
|
"resume": "Graines toxiques — cause fréquente d'intoxication chez l'enfant aux Antilles. Quelques graines suffisent."
|
||||||
|
},
|
||||||
|
"indices": { "fruit": "capsule verte devenant jaune puis noire, 2 à 3 graines brun foncé", "usage_haie": "souvent planté en haie vive, donc à portée d'enfant" },
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "lorye-jonn",
|
||||||
|
"noms": { "gcf": "lorié-jòn", "fr": "laurier jaune", "en": "yellow oleander", "es": "cabalonga" },
|
||||||
|
"taxon": { "scientifique": "Cascabela thevetia", "famille": "Apocynaceae", "wikidata": null, "gbif": null },
|
||||||
|
"iles": ["gp", "mq", "gf", "re"],
|
||||||
|
"danger": {
|
||||||
|
"niveau": "critique",
|
||||||
|
"resume": "Toute la plante est toxique, les graines particulièrement (cardiotoxiques). Plante ornementale très courante — d'où le risque."
|
||||||
|
},
|
||||||
|
"indices": { "fleur": "trompette jaune vif", "fruit": "drupe verte anguleuse devenant noire, une graine dure à l'intérieur", "latex": "latex blanc à la cassure" },
|
||||||
|
"medias": [],
|
||||||
|
"audio": { "gcf": null, "locuteur": null },
|
||||||
|
"valide": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user