feat(session-0): cadre juridique, porte de validation et dataset vérifié

Session 0 du plan — aucun code applicatif.

Cadre
- 5 ADR : licences, Phaser 4 hors budget initial, frontière Svelte/Phaser,
  filières A/B des assets, kréyòl langue principale (norme gwadloupéyenne).
- LICENSE (AGPL-3.0-or-later, texte canonique gnu.org), LICENSE-CONTENT
  (CC BY-SA 4.0). Le jeu est une œuvre collective : aucun compositing sur un
  média SA ou NC, contrainte vérifiée par script.
- Audit des 7 sources avec endpoints réellement appelés. TRAMIL vérifié en
  direct : « all rights reserved » et page de mentions légales en 404.
  iNaturalist mesuré à 93 % de CC BY-NC sur un échantillon de 305 photos.

Outillage (tools/data/, hors bundle, zéro appel réseau au runtime)
- verify:taxa, ingest:commons, build:dataset, validate:data, test:porte,
  build:credits, check:audio.
- validate.mjs est la porte exigée par le brief §2 : le build échoue si une
  épreuve s'appuie sur un média non validé, non photographique ou de filière B,
  sur une attribution sans auteur, sur un compositing SA/NC, ou sur une entrée
  publiée sans relecture kréyòl. test:porte prouve les 9 refus + 1 témoin.

Données
- 13 entrées (8 fruits + 5 plantes du module Pa touché) vérifiées contre
  Wikidata ET GBIF : 13/13 ACCEPTED, 0 divergence avec la graine.
- 130 candidats Commons sous licence libre, 39 pré-inscrits, 0 validé —
  aucun agent ne peut valider un média.

Écarts signalés, non corrigés en silence
- Le champ danger de la graine a deux formes (note vs resume) : normalisé.
- 3 identifiants divergent du nom kréyòl au-delà des accents : non tranchés.
- comestible:false sur akée et pomme-cajou : sous-estimation prudente assumée.
- Le mancenillier n'a aucune photographie moderne dans ses 3 premiers
  candidats — l'entrée la plus critique est la moins bien servie.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
OKI
2026-07-26 23:47:27 -04:00
co-authored by Claude Opus 5
parent f0b3ce8484
commit 945a524b44
45 changed files with 8599 additions and 0 deletions
+151
View File
@@ -0,0 +1,151 @@
# Points à arbitrer par un humain
> Le brief §9 est explicite : « 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. »
>
> Ce fichier liste ce que la session 0 a rencontré et **n'a pas tranché**. Chaque point
> indique la valeur provisoire retenue dans les données et pourquoi ce choix-là plutôt qu'un
> autre. Aucun n'est bloquant pour la session 1 ; tous le sont pour une publication.
---
## 1. `comestible: false` sur l'akée et la pomme-cajou — sous-estimation assumée
**Domaine : sécurité des enfants.**
Les cinq entrées du module « Pa touché » sortent de la composition avec `comestible: false`.
C'est **factuellement incomplet pour deux d'entre elles** :
- **Aki / akée** (*Blighia sapida*) — se mange, mais **uniquement** ouverte naturellement et
mûre, et seulement la partie charnue claire. Le fruit non mûr et les graines sont toxiques
(hypoglycine).
- **Pòm-kajou / pomme-cajou** (*Anacardium occidentale*) — la pomme se mange. C'est la coque
de la noix qui contient un liquide caustique.
**Pourquoi `false` malgré tout.** Entre deux erreurs possibles, l'une dit à un enfant « ce
fruit ne se mange pas » alors qu'il se mange sous conditions ; l'autre dit « ce fruit se
mange » à un enfant qui rencontrera un akée fermé. La seconde envoie aux urgences. Le
défaut prudent était le seul choix défendable sans arbitrage humain.
La nuance complète est présente dans `danger.resume` de chaque entrée, mot pour mot depuis
la graine. Rien n'est perdu ; c'est la valeur booléenne qui est grossière.
**À trancher :** comment l'interface exprime « comestible sous conditions strictes » sans
transformer une nuance en autorisation. Un booléen ne suffit probablement pas — un troisième
état (`conditionnel`) est possible, mais il faudra qu'il s'affiche de façon qu'un enfant de
sept ans ne le lise pas comme un oui.
---
## 2. Les fruits dangereux doivent-ils apparaître ailleurs que dans « Pa touché » ?
**Domaine : pédagogie et sécurité.**
État actuel : les cinq plantes sont en `categorie: "plante_dangereuse"`, et le validateur
**interdit** qu'un de leurs médias porte un usage `epreuve`. C'est l'application directe du
brief §6 — « jamais chronométré, jamais scoré, jamais transformé en épreuve d'adresse ».
Mais la pomme-cajou est aussi un fruit qu'on trouve au marché et que les enfants mangent.
L'exclure entièrement des modes d'apprentissage est peut-être une perte : un enfant qui sait
reconnaître une pomme-cajou et sait que la noix brûle est mieux armé qu'un enfant qui n'a
vu la plante que dans un module « danger ».
**À trancher :** une entrée peut-elle appartenir aux deux mondes ? Si oui, la règle
technique doit devenir plus fine que « catégorie dangereuse ⇒ pas d'épreuve », et cette
finesse est exactement le genre de chose qui se relâche silencieusement. La règle actuelle,
plus grossière, a le mérite d'être infranchissable.
---
## 3. Les mois de saisonnalité ne sont vérifiés contre rien
**Domaine : pédagogie.**
Les `saison_mois` des huit fruits proviennent de `fruits.seed.json` et **n'ont été vérifiés
contre aucune source** — contrairement à la taxonomie, contrôlée contre Wikidata et GBIF.
Deux problèmes distincts :
1. **Aucune source.** Rien ne les étaie aujourd'hui.
2. **Aucune distinction par île.** Le champ est unique alors que les entrées listent jusqu'à
quatre îles (`gp`, `mq`, `gf`, `re`). La Guyane et La Réunion n'ont pas le calendrier de
la Guadeloupe.
Or le mode « Sézon » repose entièrement sur ce champ, et le savoir qu'il prétend transmettre
est précisément celui qui se perd. Enseigner une saisonnalité fausse est pire que ne pas
l'enseigner.
**À trancher :** source de référence (CIRAD Antilles est le candidat naturel — lettre prête
dans `docs/courriers/cirad.md`), et passage éventuel à une structure par île. Tant que ce
n'est pas fait, **le mode Sézon ne doit pas être publié**, même s'il est techniquement prêt
en session 2.
---
## 4. Quelles photographies pour le mancenillier
**Domaine : sécurité des enfants.**
Le brief impose « aucun visuel anxiogène » sur le module « Pa touché ». Mais un enfant ne
peut éviter un mancenillier que s'il le reconnaît — et ce qu'il doit reconnaître, c'est
l'arbre entier au bord de la plage, la feuille à nervure médiane jaune, et le petit fruit
vert d'aspect appétissant.
Le danger est précisément que le fruit **paraisse bon**. La photographie utile est donc
celle d'un fruit qui a l'air appétissant, accompagnée du texte qui dit de ne pas y toucher.
**Difficulté matérielle constatée en session 0 :** les trois premiers candidats Commons pour
*Hippomane mancinella* sont **toutes des planches gravées** — Jacquin 1780, Green 1816-20,
Hocquart 1821. Aucune photographie moderne dans le haut de la pile. C'est l'entrée la plus
critique du module qui est la moins bien servie.
**À trancher :** la sélection des médias de `mansiniye`, image par image, par un humain. Ne
pas laisser ce choix à l'ordre de pertinence d'un moteur de recherche. Une photo de lésion
cutanée, par exemple, serait à la fois anxiogène et pédagogiquement inutile — l'enfant doit
reconnaître l'arbre, pas la brûlure.
**Voie la plus sûre :** photographier l'arbre soi-même sur le littoral. Il est signalé par
une bande de peinture rouge, ce qui rend la séance praticable et écarte tout risque de
confondre l'espèce.
À noter aussi : la bande de peinture rouge qui signale les mancenilliers sur le littoral
martiniquais et guadeloupéen est elle-même un indice à enseigner. Il est renseigné dans
`danger.signalement`.
---
## 5. `pòm-dlo` : trois noms, trois espèces
**Domaine : pédagogie.** Détaillé dans `docs/kreyol-a-relire.md` §3.
`pòm-dlo`, `pòm-malaka` et `pòm-rose` désignent des *Syzygium* différents selon les îles.
L'entrée actuelle associe `pòm-dlo` à *Syzygium samarangense* sur la seule foi de la graine.
La taxonomie de cette association est vérifiée ; **l'association nom ↔ espèce ne l'est pas.**
---
## 6. Le champ `iles` n'est vérifié pour aucune entrée
**Domaine : pédagogie.**
Les listes d'îles viennent de la graine. Elles déterminent quels fruits apparaissent dans un
pack d'île, donc ce qu'un enfant guadeloupéen verra. Une erreur ici ne casse rien
techniquement : elle enseigne juste qu'un fruit pousse là où il ne pousse pas.
**Piste de vérification :** les observations géolocalisées d'iNaturalist
(`place_id` Guadeloupe / Martinique / Guyane / La Réunion) donnent une première mesure
objective de présence, à croiser avec un regard local.
---
## Récapitulatif
| # | Point | Domaine | Bloque quoi |
|---|---|---|---|
| 1 | `comestible` grossier sur akée et pomme-cajou | sécurité | publication des fiches |
| 2 | Fruits dangereux hors du module Pa touché | pédagogie / sécurité | rien à ce stade |
| 3 | Saisonnalité non sourcée, non ventilée par île | pédagogie | **publication du mode Sézon** |
| 4 | Choix des photos du mancenillier | sécurité | publication du module Pa touché |
| 5 | `pòm-dlo` — association nom ↔ espèce | pédagogie | publication de l'entrée |
| 6 | Présence par île non vérifiée | pédagogie | packs d'île |
+90
View File
@@ -0,0 +1,90 @@
# ADR 0001 — Licences du code, du contenu et des médias
- **Statut :** accepté
- **Date :** 2026-07-27
- **Session :** 0 — cadre et données
- **Décideur :** le porteur (ORGANISATION KA INTERNATIONALE)
## Contexte
Le pack d'origine parlait de « ressources libres de droit ». L'expression n'a pas
d'existence juridique et masque quatre régimes très différents :
- **Wikimedia Commons** n'héberge que du libre, mais majoritairement du **CC BY-SA**,
qui impose l'attribution nominative **et** le partage à l'identique. Le partage à
l'identique contamine les œuvres dérivées.
- **iNaturalist** publie beaucoup de **CC BY-NC**, incompatible avec toute distribution
commerciale.
- **TRAMIL** (tramil.net) n'accorde aucune licence dans ses mentions légales. Par défaut :
tous droits réservés.
- **CIRAD / INRAE** appliquent des régimes mixtes, majoritairement propriétaires, avec des
usages pédagogiques négociables au cas par cas.
Le projet vise des enfants de 7 à 12 ans dans un cadre scolaire. Une erreur de licence sur
un support diffusé en classe n'est pas rattrapable par un correctif.
## Décision
### Code — AGPL-3.0-or-later
`LICENSE` contient le texte canonique récupéré depuis gnu.org. L'AGPL plutôt que la GPL
parce qu'une version future pourrait exposer une face serveur (export de progression pour
un enseignant, tableau de classe) : l'AGPL couvre l'usage en réseau, la GPL non.
### Contenu rédigé par OKI — CC BY-SA 4.0
Textes, fiches, indices botaniques, module « Pa touché », données structurées. Cohérent
avec Commons, donc réutilisable par le projet lui-même et par les enseignants.
### Médias tiers — licence d'origine conservée, œuvre collective
Chaque média garde sa licence. Le jeu est une **œuvre collective**, pas une œuvre dérivée.
C'est cette qualification qui permet à des médias CC BY-SA et CC BY-NC de coexister dans
un même produit.
### Clause non commerciale — acceptée, et irréversible
Le porteur a tranché en session 0 : le CC BY-NC est accepté pour élargir le fonds
photographique, en échange d'un **engagement non commercial définitif** sur le jeu.
Le code reste réutilisable commercialement sous AGPL une fois séparé des médias.
## Conséquences
### Ce que cette décision interdit, techniquement
1. **Aucun compositing.** Un média sous partage à l'identique ou sous clause non
commerciale ne peut être ni fusionné, ni détouré puis recombiné, ni fondu dans un atlas
de textures partagé avec d'autres médias. C'est ce qui préserve la qualification
d'œuvre collective.
2. **Aucune vente**, aucune version payante, aucune licence à un éditeur tant qu'un seul
média NC est embarqué.
3. **Aucun fichier TRAMIL.** TRAMIL se cite comme source de vérification factuelle, dans
`sources_factuelles`, jamais comme source d'images.
### Ce qui applique la décision
- `npm run validate:data` refuse tout média `composite: true` portant une clause SA ou NC,
et tout média à attribution dont l'auteur est absent.
- `npm run test:porte` prouve que ces refus se produisent réellement.
- `npm run build:credits` régénère `CREDITS.md` depuis les données, avec une section
distincte pour les médias NC. Un fichier de crédits tenu à la main se désynchronise, et
une attribution fausse est une violation.
- Le schéma impose `licence`, `auteur`, `url_fichier` et `url_description` sur chaque média.
### Condition de réexamen
Si le projet devait un jour être distribué commercialement, il faudrait retirer tous les
médias NC et régénérer les crédits. `CREDITS.md` liste ces médias dans une section dédiée
précisément pour rendre cette opération possible. À ce jour, aucun média NC n'est embarqué :
les 39 médias candidats proviennent tous de Commons, sous CC0, domaine public, CC BY ou
CC BY-SA. **L'engagement non commercial n'est donc pas encore consommé** — il ne le sera
qu'au premier média iNaturalist retenu.
## Alternatives écartées
- **Refuser le NC.** Aurait gardé une porte de sortie commerciale, au prix d'un fonds
photographique plus pauvre sur les espèces mal couvertes (zikak, pòm-sitè).
- **Isoler le NC dans un pack séparé retirable par flag.** Meilleur des deux mondes sur le
papier, mais complexifie le pipeline d'assets et le service worker pour une option dont
le porteur a jugé qu'il ne l'exercerait pas.
@@ -0,0 +1,63 @@
# ADR 0002 — Phaser 4 et l'écart au budget JS
- **Statut :** accepté, avec mesure à compléter en session 4
- **Date :** 2026-07-27
- **Session :** 0 — cadre et données
## Contexte
Le playbook OKI §2.7 fixe un budget non négociable de **170 Ko de JS initial compressé**.
Le mode arcade « Ranmasé » demande de la physique, des particules et du *game feel* : le
faire en DOM coûterait plus cher en travail et en performance qu'un moteur éprouvé.
Le pack d'origine prescrivait « Phaser 5 ». **Phaser 5 n'existe pas.** Vérification faite
au démarrage de la session :
```
$ npm view phaser version
4.2.1
```
La branche courante est Phaser 4 — 4.0 « Caladan » (avril 2026), 4.1 « Salusa »,
4.2 « Giedi » — avec un moteur WebGL réécrit en *render nodes*. Partir de Phaser 3 aurait
été partir d'une branche en fin de vie.
## Décision
Utiliser **`phaser@^4`** (4.2.1 au moment de la décision), et assumer un **écart documenté**
au budget JS, borné par quatre conditions :
1. Phaser n'est **jamais** dans le chemin critique. Import dynamique dans la route
`(jeu)/ranmase` uniquement, jamais au layout racine.
2. Le shell reste **≤ 170 Ko gzip**, Phaser exclu. Le budget n'est pas relâché : il est
mesuré à part.
3. L'entrée dans la scène passe derrière un **écran de chargement designé** (playbook P5,
en KA avec le tambour `ka`), pas derrière une page blanche.
4. Rendu `AUTO` (WebGL avec repli canvas), DPR plafonné à **1,5**,
`powerPreference: 'low-power'`, cible **30 fps stables sur Mali-G52**.
## Conséquences
- Le budget d'entrée du site (≤ 2 Mo) et les Core Web Vitals (LCP < 2,5 s, INP < 200 ms,
CLS < 0,05) restent mesurés **sur l'accueil et sur une fiche**, pages qui ne chargent
jamais Phaser.
- Un utilisateur qui ne joue jamais au mode arcade ne télécharge jamais Phaser. Les quatre
autres modes sont en Svelte pur (ADR 0003).
- La session 4 doit renseigner ici la **mesure réelle** du bundle Phaser en gzip et le
relevé de fps sur mobile d'entrée de gamme.
### Mesures — à compléter en session 4
| Mesure | Cible | Relevé |
|---|---|---|
| Shell JS initial (gzip) | ≤ 170 Ko | _à mesurer_ |
| Bundle Phaser seul (gzip) | information | _à mesurer_ |
| fps scène Ranmasé sur Mali-G52 | ≥ 30 stables | _à mesurer_ |
| Poids total de l'accueil | ≤ 2 Mo | _à mesurer_ |
## Condition de réexamen
Si la mesure de session 4 montre que Phaser dépasse ~450 Ko gzip, ou que les 30 fps ne
sont pas tenus sur mobile d'entrée de gamme, la scène « Ranmasé » est réécrite en DOM/CSS
avec une boucle rAF maison — le playbook P3 (« DOM d'abord, WebGL seulement où ça paie »)
reprend alors la main. Les quatre autres modes n'en dépendent pas : le jeu reste entier.
+59
View File
@@ -0,0 +1,59 @@
# ADR 0003 — Frontière stricte entre Svelte et Phaser
- **Statut :** accepté
- **Date :** 2026-07-27
- **Session :** 0 — cadre et données
## Contexte
Le pack d'origine supposait que le jeu entier serait porté par le moteur de jeu. Or trois
des cinq modes — Rekonèt, Kaché, Sézon — sont des interfaces de cartes et de boutons. Un
canvas les rendrait moins accessibles, plus lourds et plus difficiles à rendre lisibles
sans JavaScript, pour aucun gain.
Le public visé lit parfois mal, navigue sur Android d'entrée de gamme, et une partie de
l'usage se fera en classe, potentiellement au clavier ou avec un lecteur d'écran.
## Décision
Architecture **hybride à frontière stricte** : Svelte porte la coquille, Phaser porte un
seul îlot.
```
Svelte 5 (coquille) Phaser 4 (îlot)
├─ routes, i18n, SEO └─ scène « Ranmasé » uniquement
├─ menus, HUD, album · import dynamique dans (jeu)/ranmase
├─ fiches encyclopédiques · jamais au layout racine
├─ données, progression · game.destroy(true) au démontage
├─ audio, réglages · communication par événements
└─ Rekonèt · Kaché · Sézon · aucun état Svelte partagé par frame
```
Règles de frontière, non négociables :
1. **Import dynamique uniquement**, dans la route de la scène. Un `import` statique de
Phaser au layout racine ferait entrer 300 à 400 Ko dans le chemin critique de toutes
les pages, y compris de l'encyclopédie.
2. **Destruction symétrique** : `game.destroy(true)` au démontage du composant. Un moteur
de jeu qui survit à sa route fuit de la mémoire et continue de consommer du rAF.
3. **Communication par événements**, jamais par état Svelte lu ou écrit à chaque frame.
Le playbook §3 l'interdit explicitement : les états réactifs par frame passent par des
variables plain et un flush rAF.
4. **Miroir DOM sémantique obligatoire** pour la scène (playbook §2.8, point 4) : le canvas
est `aria-hidden`, et l'état du jeu est doublé en DOM lisible au clavier et au lecteur
d'écran.
## Conséquences
- Les quatre modes non-arcade sont **jouables au clavier** et dégradent proprement.
- La session 2 doit produire un jeu **déjà amusant sans Phaser**. C'est la porte de sortie
de cette session : si le jeu n'est pas plaisant en Svelte pur, ajouter un moteur de jeu
ne le sauvera pas — cela ajoutera du poids à un problème de game design.
- L'encyclopédie `/zerbaj/` ne dépend d'aucune brique de jeu et reste prérendue, lisible
sans JavaScript.
## Alternative écartée
**Tout en Phaser.** Aurait unifié le rendu au prix de l'accessibilité clavier, du
référencement de l'encyclopédie, de la lisibilité sans JS et du budget. Le playbook P3 est
explicite : DOM d'abord, WebGL seulement où ça paie. Ici, il ne paie que sur une scène.
+83
View File
@@ -0,0 +1,83 @@
# ADR 0004 — Deux filières d'assets : vérité et décor
- **Statut :** accepté
- **Date :** 2026-07-27
- **Session :** 0 — cadre et données
## Contexte
Le pack d'origine prévoyait de générer l'intégralité des visuels du jeu — 76 images — par
diffusion (SDXL / FLUX via ComfyUI), puis de passer directement à la production.
C'est une contradiction avec le but du jeu. Un enfant qui apprend à reconnaître un
corossol sur une image générée n'apprend pas à reconnaître un corossol : il apprend à
reconnaître ce qu'un modèle de diffusion produit quand on lui demande un corossol. Sur les
espèces peu représentées dans les jeux d'entraînement — le zikak, la quenette, le cachiman
cœur-de-bœuf, la pomme-liane — le modèle ne refuse pas : il produit un fruit **plausible
et faux**. C'est le pire des deux mondes, parce que l'erreur est invisible à qui ne connaît
pas déjà l'espèce.
Cette session a produit une illustration involontaire du même problème côté sources
réelles : parmi les photographies que Wikimedia Commons remonte pour *Melicoccus bijugatus*
(la quenette), l'un des premiers résultats est une photographie de **singe capucin**
mangeant le fruit. Aucune machine — moteur de recherche ou modèle génératif — ne peut
tenir lieu de validation botanique.
## Décision
Deux filières, deux régimes, jamais mélangés.
| Filière | Contenu | Source autorisée | Rôle |
|---|---|---|---|
| **A — Vérité** | fruit, coupe, feuille, écorce, port de l'arbre | photographie réelle : Commons, iNaturalist, herbier, appareil du porteur | tout ce qui sert à **identifier** — épreuves, indices, fiches |
| **B — Décor** | fonds, personnages, UI, sprites arcade, badges, écrans de titre | génération IA (ComfyUI / FLUX) | tout ce qui **ne sert pas** à identifier |
### Une troisième catégorie découverte en session 0
Les fonds Commons contiennent beaucoup de **planches botaniques anciennes** — Blanco,
Merian, Köhler, domaine public, exactes et magnifiques. Elles ne sont ni des photographies
ni des images générées. Le schéma les distingue donc explicitement :
```
type_media : "photo" | "planche_botanique" | "image_generee"
```
Une planche botanique **documente** une fiche encyclopédique. Elle ne peut **pas** porter
une épreuve d'identification : une gravure au trait rehaussée n'entraîne pas l'œil à
reconnaître un fruit posé sur une table de marché.
### Le champ `usages` et la porte
Chaque média déclare où il est employé : `epreuve`, `indice`, `fiche`, `decor`. Les deux
premiers sont les usages **identifiants**. Un média identifiant doit satisfaire les quatre
conditions, vérifiées par script :
1. `filiere: "A"` ;
2. `type_media: "photo"` ;
3. `valide: true`, avec un `valide_par` nommé — une validation anonyme n'engage personne ;
4. `vue` renseignée.
## Conséquences
- `npm run validate:data` fait échouer le build sur toute violation. `npm run test:porte`
rejoue les neuf cas interdits et vérifie que le refus se produit — une règle qu'on n'a
jamais vue refuser quelque chose est une intention, pas une règle.
- **Tout média sort de l'ingestion avec `valide: false`.** Aucun agent, aucun script, aucun
modèle ne peut passer ce champ à `true`. La validation se fait par comparaison à au moins
deux photographies de référence, idéalement contresignée par quelqu'un qui connaît :
TRAMIL, un enseignant de SVT, un agriculteur, une grand-mère.
- Le pipeline de génération (filière B) vit dans `tools/assets/`, hors du bundle, avec son
propre `requirements.txt`. Il est piloté **hors ligne, au build** (playbook P2). Aucun
appel réseau ne subsiste au runtime du jeu.
- Les défauts du script du pack d'origine sont corrigés en session 3 :
`hash()` de Python est randomisé par exécution (`PYTHONHASHSEED`), donc les seeds annoncés
comme reproductibles ne le sont pas — utiliser `zlib.crc32(clé.encode()) & 0xFFFFFFFF` ;
`copy.deepcopy` au lieu de `json.loads(json.dumps(...))` ; et vérifier la licence des
**poids** du modèle `rembg`, qui ne suit pas nécessairement la licence MIT du paquet.
## Alternative écartée
**Générer les visuels d'identification et les faire valider a posteriori.** Le pack le
proposait implicitement. Le problème n'est pas la validation, c'est le coût de l'erreur non
détectée : un validateur non spécialiste confirmera un corossol plausible. La photographie
supprime la question.
+78
View File
@@ -0,0 +1,78 @@
# ADR 0005 — Le kréyòl est la langue principale, norme gwadloupéyenne
- **Statut :** accepté ; orthographe en attente de relecture humaine
- **Date :** 2026-07-27
- **Session :** 0 — cadre et données
## Contexte
Le jeu vise à restituer une connaissance qui se transmettait en kréyòl. Traiter le kréyòl
comme une traduction du français inverserait le rapport que le projet cherche précisément
à rétablir.
Par ailleurs, les orthographes gwadloupéyenne et matinitjée diffèrent sur plusieurs entrées
du jeu de données. Les mélanger produirait un contenu que personne ne reconnaît tout à
fait comme le sien.
## Décision
### Le nom kréyòl est le nom de l'entrée
Dans les données, `noms.gcf` est le **nom principal**. `noms.fr`, `noms.en` et `noms.es` en
sont les traductions. Le schéma rend `gcf` obligatoire et les autres facultatives — pas
l'inverse. C'est un choix politique, pas cosmétique, et il ne s'inverse pas au motif que le
français serait « plus pratique » pour l'interface.
### Routes
`/` sert le kréyòl, `/fr/` le français, `/en/` l'anglais. Routeur par dossiers avec
catalogues JSON, pas de middleware (playbook §5b.7) : les URLs et le prérendu restent sous
contrôle total, ce qui est la condition du statique et du hors-ligne.
Attribut `lang="gcf"` correct partout, y compris sur les fragments kréyòl insérés dans une
page française — un nom de fruit prononcé par un lecteur d'écran avec la phonétique
française n'est pas le nom du fruit.
### Norme orthographique : gwadloupéyenne
Une seule norme pour tout le projet, décidée par le porteur en session 0. Le champ
`orthographe.norme` vaut `"gwadloupeyen"` sur chaque entrée, et le schéma n'accepte pas
d'autre valeur : il est impossible de mélanger les deux normes sans modifier le schéma,
donc sans que la décision soit revue.
### L'orthographe elle-même n'est pas du ressort de l'agent
Aucune graphie n'est tranchée par un agent de code. Chaque entrée porte :
```json
"orthographe": { "norme": "gwadloupeyen", "statut": "a_relire", "relu_par": null }
```
`statut` ne passe à `"relu"` que par décision d'un locuteur humain nommé. Le validateur
refuse toute entrée déclarée publiable dont l'orthographe n'est pas relue, et toute entrée
`relu` sans nom de relecteur.
Les incertitudes constatées sont consignées dans `docs/kreyol-a-relire.md` — signalées, pas
corrigées.
## Conséquences
- Les 13 graphies issues de `fruits.seed.json` sont **toutes non vérifiées** à ce stade. La
graine elle-même le déclare. Trois incohérences internes ont été relevées entre
l'identifiant technique et le nom kréyòl (voir `docs/kreyol-a-relire.md`) : elles ne sont
pas corrigées ici.
- Les identifiants techniques (`id`) restent en ASCII sans diacritique — ils servent de nom
de fichier et de segment d'URL. Ils ne sont **pas** une graphie et ne doivent jamais être
affichés à l'utilisateur. `kowosol` est un identifiant ; `kowosòl` est un nom.
- Un identifiant ne se renomme jamais après publication : il est dans les URLs, dans la
progression stockée en local et dans les liens partagés. Une correction d'orthographe
change `noms.gcf`, jamais `id`.
- Chaque entrée doit recevoir un enregistrement audio du nom prononcé par une voix humaine
locale. Pas de synthèse vocale : les enfants visés lisent mal le kréyòl écrit, dont
l'orthographe leur est peu familière — un jeu qui enseigne les noms kréyòl sans les faire
entendre rate sa cible. `npm run check:audio` tient la liste de ce qui manque.
## Point ouvert
Le relecteur n'est pas encore désigné. Tant qu'il ne l'est pas, aucune entrée ne peut être
publiée : c'est le validateur qui l'impose, pas une note de bas de page.
+22
View File
@@ -0,0 +1,22 @@
# Enregistrements kréyòl à réaliser
> Généré par `npm run check:audio`. Aucune synthèse vocale : ces noms doivent être
> prononcés par une voix humaine locale (brief §6).
Format attendu : `.opus` — un fichier par entrée, déposé dans `static/audio/<id>.opus`.
## À enregistrer (13)
- [ ] **aki**`static/audio/ake.opus` _(akée)_
- [ ] **fwiyapen**`static/audio/fwiyapen.opus` _(fruit à pain)_
- [ ] **gouyav**`static/audio/gouyav.opus` _(goyave)_
- [ ] **kénèt**`static/audio/kenet.opus` _(quenette)_
- [ ] **kowosòl**`static/audio/kowosol.opus` _(corossol)_
- [ ] **lorié-jòn**`static/audio/lorye-jonn.opus` _(laurier jaune)_
- [ ] **mansiniyé**`static/audio/mansiniye.opus` _(mancenillier)_
- [ ] **medsinyé**`static/audio/medisinye.opus` _(médicinier)_
- [ ] **pòm-dlo**`static/audio/pom-dlo.opus` _(pomme d'eau)_
- [ ] **pòm-kajou**`static/audio/pom-kajou.opus` _(pomme-cajou)_
- [ ] **pòm-kannèl**`static/audio/pom-kannel.opus` _(pomme-cannelle)_
- [ ] **pòm-sitè**`static/audio/pom-site.opus` _(prune de Cythère)_
- [ ] **zikak**`static/audio/zikak.opus` _(icaque)_
+235
View File
@@ -0,0 +1,235 @@
# Audit des sources — KI FWI SA YÉ ?
> Session 0. Chaque fiche répond à quatre questions : **ce qu'on y prend**, **sous quelle
> licence**, **avec quelle contrainte**, **comment on l'interroge**. Les endpoints listés
> ont été **appelés réellement** pendant l'audit, pas recopiés d'une documentation.
>
> Date de l'audit : 2026-07-27.
---
## Tableau de synthèse
| Source | Ce qu'on y prend | Régime | Verdict |
|---|---|---|---|
| **Wikidata** | Q-id, taxonomie | CC0 | ✅ Utilisée, sans réserve |
| **GBIF** | nom accepté, clé d'usage, famille | données ouvertes | ✅ Utilisée, sans réserve |
| **Wikimedia Commons** | photographies, planches | CC0 / PD / CC BY / CC BY-SA | ✅ Utilisée, attribution obligatoire, **pas de compositing** |
| **iNaturalist** | photographies de complément | ~93 % CC BY-NC (mesuré) | ⚠️ Autorisée mais engage le non-commercial (ADR 0001) |
| **TRAMIL** | vérification factuelle citée | **tous droits réservés** | ⛔ **Aucun fichier.** Demande écrite requise |
| **CIRAD / Agritrop** | vérification, publications | mixte, majoritairement © | ⛔ Demande écrite avant tout usage |
| **INRAE** | vérification | mixte | ⛔ Demande écrite avant tout usage |
| **Photos du porteur** | tout | choisi par le porteur | ✅ La meilleure source disponible |
---
## 1. Wikidata — la colonne vertébrale des identifiants
**Ce qu'on y prend.** L'identifiant Q de chaque taxon, et la famille botanique remontée par
la chaîne de taxons parents.
**Licence.** CC0 pour les données. Aucune contrainte d'attribution, mais le projet cite la
source par honnêteté et pour la traçabilité.
**Contrainte.** Wikidata est un wiki : une valeur peut être fausse ou obsolète. C'est
pourquoi le projet croise **systématiquement** avec GBIF et exige les deux dans le schéma
(`verifie_contre` doit contenir `wikidata` **et** `gbif` — un seul ne suffit pas).
**Comment on l'interroge.** Une seule requête SPARQL pour les 13 taxons :
```sparql
SELECT ?taxon ?name ?fam WHERE {
VALUES ?name { "Annona muricata" }
?taxon wdt:P225 ?name .
OPTIONAL { ?taxon wdt:P171+ ?f . ?f wdt:P105 wd:Q35409 ; wdt:P225 ?fam . }
}
```
`P225` = nom du taxon · `P171` = taxon supérieur · `P105` = rang · `Q35409` = famille.
Endpoint `https://query.wikidata.org/sparql`, en-tête `User-Agent` identifiant le projet
(exigé par l'infrastructure Wikimedia). Implémenté dans `tools/data/verify-taxa.mjs`.
**Résultat de l'audit.** 13/13 taxons trouvés par correspondance exacte sur `P225`.
---
## 2. GBIF — le nom scientifique accepté
**Ce qu'on y prend.** La clé d'usage (`usageKey`), le nom scientifique **accepté**, le
statut (`ACCEPTED` / `SYNONYM`) et la famille.
**Licence.** Données ouvertes. GBIF demande la citation du jeu de données ; le projet cite
GBIF globalement dans `CREDITS.md` et lie chaque entrée à sa fiche.
**Contrainte.** C'est ici que se détectent les **synonymes**, piège central d'un dataset
botanique. Le laurier-jaune est le cas d'école : il circule largement sous
*Thevetia peruviana*, alors que le nom accepté est *Cascabela thevetia*. Un dataset qui
fige un synonyme se désynchronise silencieusement des référentiels.
**Comment on l'interroge.**
```
GET https://api.gbif.org/v1/species/match?name=<nom>&strict=false
GET https://api.gbif.org/v1/species/<usageKey> # si status ≠ ACCEPTED
```
**Résultat de l'audit.** 13/13 en `matchType: EXACT` et `status: ACCEPTED`. **Aucune
divergence** avec les familles annoncées dans `fruits.seed.json`. La graine était bonne sur
ce point — c'est vérifié, plus supposé. Rapport : `docs/verification-taxons.md`.
---
## 3. Wikimedia Commons — le fonds photographique principal
**Ce qu'on y prend.** Des photographies pour la filière A (vérité), et des planches
botaniques anciennes pour les fiches encyclopédiques.
**Licence.** Commons n'héberge que du libre, mais « libre » recouvre plusieurs régimes très
différents. Sur les 130 candidats remontés pendant l'audit : domaine public, CC0, CC BY 2.0
à 4.0, CC BY-SA 2.0 à 4.0.
**Contraintes, dans l'ordre de gravité.**
1. **Le partage à l'identique contamine les dérivés.** Une photo CC BY-SA compositée dans
un sprite rend le sprite CC BY-SA. D'où l'interdiction absolue de compositing posée par
l'ADR 0001 et vérifiée par `npm run validate:data`.
2. **L'attribution est nominative.** Il faut l'auteur, la licence, l'URL du fichier et
l'URL de la page de description. Le script les récupère et refuse tout fichier à
attribution dont l'auteur est absent des métadonnées.
3. **Le titre ne garantit rien.** Une recherche sur *Melicoccus bijugatus* remonte en
deuxième position une photographie de **singe capucin** mangeant le fruit. Le moteur de
recherche n'est pas un botaniste. Rien ne sort de l'ingestion autrement qu'en
`valide: false`.
4. **Toutes les licences ne sont pas acceptables.** L'audit a écarté automatiquement
4 fichiers : deux sous GFDL 1.2 ou « Attribution » simple (régimes non retenus), deux
sous licence à attribution dont l'auteur était introuvable dans les métadonnées.
**Comment on l'interroge.**
```
GET https://commons.wikimedia.org/w/api.php
?action=query&generator=search&gsrnamespace=6
&gsrsearch="<nom scientifique>" filetype:bitmap
&prop=imageinfo&iiprop=url|size|mime|extmetadata
&iiextmetadatafilter=LicenseShortName|LicenseUrl|Artist|Credit|ImageDescription|DateTimeOriginal
```
Implémenté dans `tools/data/ingest-commons.mjs`. **Aucun fichier n'est téléchargé** en
session 0 : on ne collecte que des métadonnées et des URLs.
**Résultat de l'audit.** 130 candidats sous licence libre sur 13 taxons, soit au moins 10
par taxon. Aucun taxon sous le seuil de deux candidats.
---
## 4. iNaturalist — complément, au prix d'un engagement
**Ce qu'on y prend.** Des photographies pour les espèces mal couvertes par Commons, et des
observations géolocalisées aux Antilles (utile pour la saisonnalité par île, mode Sézon).
**Licence — mesurée, pas supposée.** Échantillon relevé pendant l'audit sur
*Chrysobalanus icaco* (zikak), 305 photographies de qualité recherche :
| licence | photos | part |
|---|---|---|
| CC BY-NC | 280 | 92 % |
| CC0 | 12 | 4 % |
| CC BY | 8 | 3 % |
| CC BY-NC-SA | 5 | 2 % |
**94 % du fonds est donc sous clause non commerciale.** Se limiter au non-NC réduirait
iNaturalist à un appoint marginal.
**Contrainte.** Retenir une seule photo NC engage le projet à ne jamais être distribué
commercialement (ADR 0001, décision du porteur). Le champ `usage_non_commercial` marque ces
médias dans les données, et `CREDITS.md` les isole dans une section dédiée pour rendre un
retrait ultérieur possible.
**Comment on l'interroge.**
```
GET https://api.inaturalist.org/v1/observations
?taxon_name=<nom>&quality_grade=research
&photo_license=cc0,cc-by,cc-by-sa,cc-by-nc,cc-by-nc-sa
&place_id=<Guadeloupe|Martinique> # pour la saisonnalité locale
```
**État à ce jour.** Aucune photo iNaturalist n'est encore embarquée. L'engagement non
commercial n'est donc **pas encore consommé**.
---
## 5. TRAMIL — ressource majeure, inutilisable sans autorisation
**Ce qu'on y prend.** Rien, en fichiers. TRAMIL sert de **source de vérification factuelle
citée en référence** — usages traditionnels, toxicité, parties de plante concernées — dans
le champ `sources_factuelles` de chaque entrée.
**Licence — vérifiée directement pendant l'audit.**
- Le pied de page de `tramil.net` affiche : **« © Copyright 2017 TRAMIL all rights
reserved. »**
- Le lien « Legal notice » du site renvoie une **erreur 404** (`/content/mentions-legales`,
vérifié le 2026-07-27).
Autrement dit : non seulement aucune licence n'est accordée, mais **les conditions ne sont
pas même consultables**. Par défaut : tous droits réservés.
**Contrainte.** La TRAMILothèque (photographies, planches d'herbier, coupes microscopiques,
scans) est exactement ce dont ce projet aurait besoin, et est **inutilisable sans
autorisation écrite**. Aucun fichier TRAMIL ne peut entrer dans le dépôt tant que cette
autorisation n'existe pas.
**Ce qu'il faut faire — et qui ne se délègue pas.** TRAMIL est hébergé par le SCD de
l'Université des Antilles à Schœlcher. Le porteur est à quinze minutes. Un partenariat
TRAMIL × OKI sur un jeu scolaire martiniquais a toutes les chances d'aboutir, et
transformerait le projet : accès à des images d'herbier vouchées, et une caution
scientifique sur le module « Pa touché ».
Lettre-type prête : `docs/courriers/tramil.md`.
---
## 6. CIRAD / Agritrop et INRAE
**Ce qu'on y prend.** De la vérification factuelle : saisonnalité réelle sous climat
antillais, variétés cultivées localement, données agronomiques. Agritrop, le dépôt ouvert
du CIRAD, contient de l'open access exploitable en citation.
**Licence.** Régimes mixtes, majoritairement propriétaires, avec des cas d'usage pédagogique
négociables. **À demander, jamais à présumer** — y compris sur un dépôt « ouvert », où
l'ouverture porte souvent sur la lecture, pas sur la réutilisation.
**Comment on l'interroge.** Consultation manuelle d'Agritrop (`agritrop.cirad.fr`), avec
enregistrement de la référence dans `sources_factuelles`. Aucune ingestion automatisée : le
volume ne le justifie pas et le régime de licence l'interdirait.
Lettre-type prête : `docs/courriers/cirad.md`.
---
## 7. Photographies du porteur — la meilleure source
Une photographie prise au marché de Fort-de-France vaut mieux que n'importe quelle
génération, et mieux que la plupart des photos de Commons : elle montre la variété locale,
au bon stade de maturité, dans le contexte où l'enfant la rencontrera.
**Licence.** Choisie par le porteur. `OKI-CC-BY-SA-4.0` dans le schéma, alignée sur
`LICENSE-CONTENT`. Aucune contrainte externe, aucun risque, et aucun compositing interdit
puisque le projet en détient les droits.
**Ce qui manquera nécessairement.** Les vues d'indice — écorce, feuille isolée, coupe nette
— sont rares sur Commons pour les espèces antillaises. Ce sont précisément celles dont le
mode Kaché a besoin. Une après-midi de terrain avec un appareil comblera plus de trous que
n'importe quelle recherche automatisée.
---
## Ce que cet audit ne couvre pas
- La **validité botanique** de chaque photographie : aucune machine ne peut la trancher.
- Les **droits voisins des locuteurs** pour les enregistrements audio : autorisation écrite
à obtenir avant embarquement, crédit nominatif dans `CREDITS.md`.
- La **licence des poids** du modèle utilisé par `rembg` dans le pipeline de filière B
(session 3) : les poids ne suivent pas toujours la licence du paquet, à vérifier avant
toute utilisation.
+69
View File
@@ -0,0 +1,69 @@
# Lettre-type — demande d'autorisation CIRAD / INRAE
> **À adapter et envoyer par le porteur.** Champs à compléter entre crochets.
> Le CIRAD dispose d'une implantation en Martinique et en Guadeloupe : privilégier
> l'antenne locale plutôt que le siège de Montpellier.
>
> Régime : mixte, majoritairement propriétaire, avec des usages pédagogiques négociables.
> Agritrop (`agritrop.cirad.fr`) est un dépôt ouvert — mais l'ouverture y porte sur la
> lecture, pas nécessairement sur la réutilisation. Vérifier la licence pièce par pièce
> avant d'en présumer quoi que ce soit. Voir `docs/audit-sources.md` §6.
---
**Objet : demande d'usage pédagogique — jeu éducatif libre sur les fruits des Antilles**
[Lieu], le [date]
À l'attention de [nom / service communication ou direction régionale Antilles-Guyane],
Madame, Monsieur,
ORGANISATION KA INTERNATIONALE, structure établie en [Martinique / Guadeloupe], développe
**« KI FWI SA YÉ ? »**, un jeu éducatif gratuit et libre destiné aux enfants de 7 à 12 ans
des Antilles, de la Guyane et de La Réunion. Son objet : leur réapprendre à reconnaître et
à nommer les fruits et les arbres de leurs îles, en kréyòl d'abord.
Le projet est non commercial et sans publicité : code sous AGPL-3.0, contenu sous
CC BY-SA 4.0, aucun compte, aucun traceur, aucune collecte de données sur les enfants.
**Notre demande porte sur trois points, par ordre d'importance décroissante.**
**1. Les données de saisonnalité.** Le jeu comporte un mode « Sézon » où l'enfant place les
fruits sur le calendrier de l'année. C'est une connaissance en voie de disparition, et nos
données actuelles reposent sur des sources générales, non spécifiques aux Antilles
françaises. Vos travaux agronomiques régionaux permettraient de les fonder correctement.
Nous sollicitons l'autorisation de citer et d'exploiter ces données pour [liste des espèces],
avec citation de la référence complète dans le jeu.
**2. L'iconographie.** Si votre fonds comporte des photographies exploitables pour ces
espèces — en particulier les vues d'écorce, de feuille isolée et de coupe, rares dans les
fonds libres — nous serions intéressés par une autorisation d'usage limitée à ce jeu, avec
crédit nominatif, sans modification et sans redistribution hors du jeu.
**3. Une relecture.** Si un de vos chercheurs de l'antenne Antilles acceptait de relire les
fiches botaniques (indices de reconnaissance : feuille, écorce, port, coupe), cette
relecture serait créditée.
Nous restons naturellement ouverts à une forme de partenariat qui vous conviendrait mieux,
y compris une mention institutionnelle sur la page de crédits du projet.
Je vous prie d'agréer, Madame, Monsieur, l'expression de ma considération distinguée.
[Nom]
[Fonction] — ORGANISATION KA INTERNATIONALE
[courriel] · [téléphone]
o-k-i.net
---
## Suivi de la demande
| Date | Action | Interlocuteur | Résultat |
|---|---|---|---|
| | envoi | | |
| | relance | | |
| | réponse | | |
**Tant que la colonne « résultat » est vide, aucun fichier CIRAD ou INRAE n'entre dans le
dépôt, et aucune donnée n'est reprise sans citation explicite de sa source.**
+78
View File
@@ -0,0 +1,78 @@
# Lettre-type — demande d'autorisation TRAMIL
> **À adapter et envoyer par le porteur.** Champs à compléter entre crochets.
> TRAMIL est hébergé par le SCD de l'Université des Antilles, campus de Schœlcher.
> Une visite sur place vaut mieux qu'un courriel : le projet est local, l'interlocuteur
> aussi, et une demande présentée de vive voix obtient une réponse.
>
> Contexte juridique de la démarche : `docs/audit-sources.md` §5. Le pied de page de
> tramil.net indique « © Copyright 2017 TRAMIL all rights reserved » et la page de mentions
> légales du site est inaccessible (404, vérifié le 2026-07-27) — aucune licence n'est donc
> accordée, même implicitement.
---
**Objet : demande d'autorisation d'usage pédagogique — jeu éducatif libre sur les fruits et plantes des Antilles**
[Lieu], le [date]
À l'attention de [nom du responsable / de la coordination TRAMIL],
Madame, Monsieur,
Je suis [nom], [fonction] au sein d'ORGANISATION KA INTERNATIONALE, structure établie en
[Martinique / Guadeloupe] et spécialisée dans le développement de logiciels libres à
vocation culturelle et éducative.
Nous développons **« KI FWI SA YÉ ? »**, un jeu éducatif gratuit destiné aux enfants de 7 à
12 ans des Antilles et de la Guyane. Son objet est de leur réapprendre à reconnaître et à
nommer les fruits, les arbres et les plantes de leurs îles — en kréyòl d'abord, le français
venant en traduction. Le jeu comprend un module de sécurité consacré aux plantes dangereuses
du quotidien : mancenillier, akée non mûr, coque de pomme-cajou, médicinier, laurier-jaune.
Le projet est **entièrement libre et non commercial** : code sous licence AGPL-3.0, contenu
sous CC BY-SA 4.0, aucune publicité, aucun compte utilisateur, aucun traceur, aucune
collecte de données sur les enfants. Il est destiné à un usage en classe et en famille, et
fonctionne hors ligne pour tenir compte des connexions scolaires.
**Notre demande porte sur deux points.**
**1. La TRAMILothèque comme source iconographique.** Vos photographies, planches d'herbier
et coupes constituent une ressource sans équivalent pour la région, et surtout une ressource
*vouchée* — ce qui est décisif pour un jeu dont l'objet même est l'identification correcte.
Nous sollicitons l'autorisation d'utiliser [nombre] images relatives aux espèces suivantes :
[liste des espèces], dans le seul cadre de ce jeu et de son encyclopédie associée.
Nous nous engageons à : créditer nominativement TRAMIL et l'auteur de chaque image à
l'endroit où elle apparaît et dans un écran de crédits dédié ; ne procéder à aucune
modification ni recomposition des images ; ne pas les redistribuer hors du jeu ; et retirer
toute image sur simple demande de votre part.
**2. Une relecture scientifique du module de sécurité.** Ce module traite de plantes qui
provoquent chaque année des accidents chez des enfants aux Antilles. Nous ne souhaitons pas
le publier sans qu'un regard compétent l'ait relu. Si l'un de vos collaborateurs acceptait
d'en relire le contenu — cinq fiches, une page chacune — cette relecture serait créditée
comme telle.
Nous serions heureux de vous présenter le projet de vive voix, à Schœlcher ou en visio, à
votre convenance. Une démonstration de l'état d'avancement prend une vingtaine de minutes.
Je reste à votre disposition pour toute précision et vous prie d'agréer, Madame, Monsieur,
l'expression de ma considération distinguée.
[Nom]
[Fonction] — ORGANISATION KA INTERNATIONALE
[courriel] · [téléphone]
o-k-i.net
---
## Suivi de la demande
| Date | Action | Interlocuteur | Résultat |
|---|---|---|---|
| | envoi / visite | | |
| | relance | | |
| | réponse | | |
**Tant que la colonne « résultat » est vide, aucun fichier TRAMIL n'entre dans le dépôt.**
+110
View File
@@ -0,0 +1,110 @@
# Kréyòl à relire
> **Rien dans ce fichier n'a été tranché par un agent de code.** L'ADR 0005 le pose comme
> règle : l'orthographe kréyòl n'est pas du ressort de l'outillage. Ce document **signale**,
> il ne corrige pas.
>
> Norme retenue pour le projet : **gwadloupéyenne** (ADR 0005). Une seule norme, jamais de
> mélange. Le schéma n'accepte pas d'autre valeur que `"gwadloupeyen"` dans
> `orthographe.norme` — changer d'avis suppose de modifier le schéma, donc de revoir la
> décision explicitement.
## Statut
**13 entrées sur 13 sont en `statut: "a_relire"`.** Aucune n'est publiable tant qu'un
locuteur nommé n'a pas tranché : `npm run validate:data` refuse toute entrée déclarée
valide dont l'orthographe n'est pas relue, et toute entrée relue sans nom de relecteur.
Relecteur désigné : **aucun à ce jour.**
## 1. Incohérences internes relevées dans la graine
Les identifiants techniques sont en ASCII sans diacritique — c'est voulu, ils servent de
nom de fichier et de segment d'URL, et ne sont jamais affichés. Mais trois d'entre eux
diffèrent du nom kréyòl **au-delà des seuls accents**, ce qui suggère une hésitation de
graphie, pas une simple translittération :
| id | `noms.gcf` | Écart constaté |
|---|---|---|
| `ake` | `aki` | voyelle finale différente : *e* contre *i* |
| `medisinye` | `medsinyé` | syllabe supplémentaire : *me-di-* contre *med-* |
| `lorye-jonn` | `lorié-jòn` | *lorye* contre *lorié* ; *jonn* contre *jòn* |
**Question au relecteur :** quelle graphie retenir pour chacun ? Le nom kréyòl
(`noms.gcf`) sera corrigé en conséquence. **L'identifiant, lui, ne bougera pas** — il est
déjà dans les URLs et dans la progression stockée localement.
## 2. Graphies à confirmer
Toutes issues de `fruits.seed.json`, qui déclare lui-même l'ensemble comme non vérifié.
Aucune n'est ici présentée comme correcte.
### Fruits
| id | graphie de la graine | français |
|---|---|---|
| `kowosol` | kowosòl | corossol |
| `kenet` | kénèt | quenette |
| `gouyav` | gouyav | goyave |
| `pom-site` | pòm-sitè | prune de Cythère |
| `zikak` | zikak | icaque |
| `pom-kannel` | pòm-kannèl | pomme-cannelle |
| `fwiyapen` | fwiyapen | fruit à pain |
| `pom-dlo` | pòm-dlo | pomme d'eau |
### Plantes du module « Pa touché »
| id | graphie de la graine | français |
|---|---|---|
| `mansiniye` | mansiniyé | mancenillier |
| `ake` | aki | akée |
| `pom-kajou` | pòm-kajou | pomme-cajou |
| `medisinye` | medsinyé | médicinier |
| `lorye-jonn` | lorié-jòn | laurier jaune |
**Point d'attention particulier :** la graine a été rédigée sans norme arrêtée, et signale
elle-même que les orthographes gwadloupéyenne et matinitjée diffèrent sur plusieurs de ces
entrées. Le projet ayant retenu la norme gwadloupéyenne, chaque graphie doit être confirmée
dans cette norme — y compris celles qui « paraissent » correctes.
## 3. Un point qui n'est pas orthographique mais lexical
`fruits.seed.json` porte cet avertissement sur `pom-dlo`, repris tel quel dans les données :
> « 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*).
C'est un point de confusion classique, et il ne se règle pas par l'orthographe : il faut
décider **quel fruit porte quel nom en Guadeloupe**, puis s'y tenir. Un jeu qui enseigne
un nom que l'enfant entend appliqué à un autre fruit chez lui produit exactement la
confusion qu'il prétend dissiper.
L'entrée actuelle associe `pòm-dlo` à *Syzygium samarangense*, sur la seule foi de la
graine. **Non vérifié.** Trois voies possibles, à trancher par le relecteur : garder,
corriger, ou scinder en plusieurs entrées distinctes.
## 4. Ce qui reste à faire hors relecture
- **Les enregistrements.** Chaque nom doit être prononcé par une voix humaine locale ; pas
de synthèse vocale. La liste de ce qui manque est tenue à jour par
`npm run check:audio``docs/audio-a-enregistrer.md` (13 noms à enregistrer aujourd'hui).
- **La cohérence entre graphie et prononciation.** Le relecteur qui tranche l'orthographe
est idéalement celui qui enregistre, ou au moins celui qui écoute les enregistrements.
## Comment consigner une relecture
Dans `src/lib/data/fruits/<id>.json` :
```json
"orthographe": {
"norme": "gwadloupeyen",
"statut": "relu",
"relu_par": "Nom du relecteur"
}
```
Corriger `noms.gcf` si nécessaire. Ne jamais toucher à `id`. Puis :
```bash
npm run validate:data
```
+197
View File
@@ -0,0 +1,197 @@
# Plan des sessions — KI FWI SA YÉ ?
> Chaque session se termine par un build vert, un commit et une note de session dans
> `docs/sessions/`. **Ne pas enchaîner deux sessions sans relire ce qui a été produit.**
>
> Une porte de sortie n'est franchie que si elle est **mesurée**, pas estimée. Une porte non
> franchie n'autorise pas la session suivante : elle autorise à recommencer celle-ci.
---
## Session 0 — Cadre et données ✅ terminée
**Livré.** Dépôt initialisé, cinq ADR, audit des sept sources, `fruits.schema.json`,
validateur exécutable et son test, 13 entrées vérifiées contre Wikidata et GBIF, 39 médias
candidats sourcés sur Commons, `CREDITS.md` généré, licences, lettres-types, points à
arbitrer.
**Porte de sortie — franchie.**
| Critère | Cible | Mesuré |
|---|---|---|
| Taxons vérifiés contre **deux** référentiels | 13 | 13 ✅ |
| Divergences avec la graine | signalées | 0 divergence ✅ |
| Médias candidats sous licence libre | ≥ 2 par entrée | 10 par entrée ✅ |
| Médias validés | 0 attendu | 0 ✅ |
| `npm run validate:data` | vert | vert ✅ |
| `npm run test:porte` | 10/10 | 10/10 ✅ |
| Code applicatif écrit | aucun | aucun ✅ |
---
## Session 1 — Socle
SvelteKit 2 + Svelte 5 (runes) + TypeScript strict, `adapter-static`, prérendu intégral,
`trailingSlash: 'always'`. Tokens OKI (`oki-tokens.css` + `base.css`), thème sombre par
défaut et clair en opt-in AA. Polices Archivo et Inter self-hébergées en woff2. PWA légère.
i18n par dossiers — `/` en kréyòl, `/fr/`, `/en/`. `/zerbaj/` : une page prérendue par
entrée, avec JSON-LD, hreflang et le traitement `PRD_AI_Overview`.
**Porte de sortie.**
| Critère | Cible |
|---|---|
| Fiches en ligne | 13, une page prérendue chacune |
| Lighthouse mobile (accueil **et** une fiche) | ≥ 90 / 95 / 95 / 95 |
| Contenu lisible avec JavaScript désactivé | intégralement |
| JS initial | ≤ 170 Ko gzip |
| Requêtes vers un domaine tiers | **0**, vérifié par grep du build |
| `npm run check` | 0 erreur, 0 warning |
| `svelte-autofixer` sur chaque composant modifié | silencieux |
**Dépendance humaine :** aucune. La session 1 fonctionne avec 0 média validé — les fiches
affichent le texte, la taxonomie et les crédits, pas encore les photos.
---
## Session 2 — Moteur pédagogique, en Svelte pur
Modes **Rekonèt** (photo → 4 propositions, répétition espacée Leitner à 5 boîtes persistée
en local), **Kaché** (indices dévoilés un à un : feuille → écorce → coupe → fruit entier,
score dégressif) et **Sézon** (calendrier). Album `Lakou`, badges, audio, export de la
progression en JSON. Moment de révélation : retournement de la photo, nom kréyòl prononcé,
score en count-up (rAF → écriture DOM directe, span `aria-hidden` + valeur finale en
`.sr-only` dans une région `aria-live`), fiche ajoutée à l'album.
**Porte de sortie — la plus importante du projet.**
| Critère | Cible |
|---|---|
| **Le jeu est amusant sans Phaser** | jugement humain, sur une partie réelle |
| Navigation clavier complète sur les trois modes | vérifiée à la main |
| `prefers-reduced-motion` | gate unique au provider, vérifiée à la main |
| Progression conservée après rechargement | vérifiée |
| Cibles tactiles | ≥ 44 px, testées par `elementFromPoint` en 390 px |
| JS initial | toujours ≤ 170 Ko gzip |
**Si le jeu n'est pas plaisant ici, ne pas passer à la session 3.** Ajouter un moteur de jeu
à un problème de game design ajoute du poids au problème. Le mode Sézon reste non publiable
tant que le point 3 de `docs/a-arbitrer.md` n'est pas tranché.
**Dépendance humaine :** au moins deux photos validées par entrée pour que Rekonèt
fonctionne sur de vraies données. C'est le premier point de blocage réel du projet.
---
## Session 3 — Pipeline d'assets, filière B
Client ComfyUI dans `tools/assets/`, hors bundle, avec son `requirements.txt`. Seeds
déterministes par `zlib.crc32(clé.encode()) & 0xFFFFFFFF` — le `hash()` de Python est
randomisé par exécution, les seeds du pack d'origine ne sont donc pas reproductibles malgré
ce qu'il annonce. `copy.deepcopy` au lieu de `json.loads(json.dumps(...))`. Sortie AVIF/WebP,
atlas de textures par écran, packs par île téléchargeables et mis en cache par le service
worker. Licence des **poids** de `rembg` vérifiée, pas seulement celle du paquet.
**Porte de sortie.**
| Critère | Cible |
|---|---|
| Assets non validés dans le build | **0**, refusé par `validate:data` |
| Assets de filière B dans une épreuve | **0**, refusé par `validate:data` |
| Poids d'entrée du site | ≤ 2 Mo |
| Reproductibilité des seeds | deux exécutions → sorties identiques, vérifié par hash |
| Appels réseau au runtime | **0** |
| Compositing sur un média SA ou NC | **0**, refusé par `validate:data` |
---
## Session 4 — Ranmasé (Phaser 4) et Pa touché
Scène arcade en `phaser@^4`, import dynamique dans `(jeu)/ranmase`, `game.destroy(true)` au
démontage, communication par événements. Rendu `AUTO`, DPR ≤ 1,5,
`powerPreference: 'low-power'`. Miroir DOM sémantique. Module **Pa touché** : jamais
chronométré, jamais scoré, ton sobre et factuel.
**Porte de sortie.**
| Critère | Cible |
|---|---|
| Phaser dans le bundle initial | **absent**, vérifié sur le build |
| Shell JS initial, Phaser exclu | ≤ 170 Ko gzip |
| Bundle Phaser mesuré et consigné dans l'ADR 0002 | fait |
| fps sur Mali-G52 ou équivalent | ≥ 30 stables |
| Miroir DOM de la scène | navigable au clavier et au lecteur d'écran |
| Écran de chargement designé | présent, en KA |
| Module Pa touché | aucun chrono, aucun score, aucune épreuve |
**Réexamen :** si Phaser dépasse ~450 Ko gzip ou que les 30 fps ne tiennent pas, la scène
est réécrite en DOM/CSS (ADR 0002). Les quatre autres modes n'en dépendent pas.
---
## Session 5 — Contenu
Passage de 8 à 24 fruits, 5 plantes dangereuses consolidées. Enregistrement des voix
kréyòl. Relecture orthographique. Arbitrage des six points de `docs/a-arbitrer.md`.
**Porte de sortie.**
| Critère | Cible |
|---|---|
| Entrées avec taxonomie vérifiée contre deux référentiels | 29 / 29 |
| Entrées en `orthographe.statut: "relu"` avec relecteur nommé | 29 / 29 |
| `npm run check:audio` — enregistrements manquants | **0** |
| Voix de synthèse | **0** |
| Photos validées par entrée, avec validateur nommé | ≥ 2 |
| Points de `docs/a-arbitrer.md` tranchés | 6 / 6 |
| Module Pa touché relu par un humain compétent | fait, tracé |
**Cette session est majoritairement du terrain, pas du code.**
---
## 🔬 Test en classe — entre la 5 et la 6
Six enfants, trente minutes, le porteur regarde **sans intervenir**.
C'est la seule mesure qui compte, et elle invalidera une partie de ce plan. Tant mieux :
c'est plus tôt qu'après la livraison. Note d'observation à écrire dans
`docs/sessions/test-classe.md` avant la session 6.
---
## Session 6 — Finition
Performance, accessibilité, DoD §8 du playbook, `.htaccess` et `_headers`, déploiement,
écran de crédits, tag, push Gitea.
**Porte de sortie — la DoD intégralement vraie, plus :**
| Critère | Cible |
|---|---|
| Requêtes tierces au runtime, sur build de production | **0**, onglet réseau |
| Médias sans source, auteur, licence et URL | **0**, vérifié par script |
| Épreuves s'appuyant sur un asset généré | **0** |
| Jeu entièrement jouable hors ligne après une visite | vérifié en mode avion |
| `/zerbaj/` lisible et complet sans JavaScript | vérifié |
| Bundle initial | ≤ 170 Ko gzip, Phaser mesuré à part |
| Lighthouse mobile, accueil et fiche | ≥ 90 / 95 / 95 / 95 |
| Navigation clavier sur les cinq modes | complète |
| Écran de crédits dans le jeu | présent, généré depuis les données |
---
## Ce qui ne se délègue à aucun agent
Ces cinq points conditionnent la livraison et ne figurent dans aucune session parce
qu'aucune session ne peut les produire :
1. **Aller voir TRAMIL à Schœlcher.** Lettre prête : `docs/courriers/tramil.md`.
2. **Enregistrer les voix kréyòl.** Liste prête : `docs/audio-a-enregistrer.md`.
3. **Photographier ce qui manque sur Commons** — il manquera, surtout les vues d'écorce, de
feuille isolée et de coupe, celles dont le mode Kaché a besoin.
4. **Faire relire l'orthographe kréyòl** par un humain. Points relevés :
`docs/kreyol-a-relire.md`.
5. **Le test en classe.**
Le code est la partie facile.
+234
View File
@@ -0,0 +1,234 @@
# Planche de relecture des médias — filière A
> Généré par `npm run ingest:commons` le 2026-07-27.
> Sortie de script : ne pas éditer à la main, rejouer `npm run ingest:commons`.
## Ce qui est demandé au porteur
Pour chaque taxon, ouvrir les pages de description et retenir au moins deux photographies
qui montrent réellement l'espèce. Reporter le choix dans `src/lib/data/fruits/<id>.json`,
assigner à chaque média sa vue (`fruit_entier`, `coupe`, `feuille`, `ecorce`, `port`),
puis passer `valide` à `true` **et seulement alors**.
Aucune vérification botanique n'a été faite par la machine : l'ordre ci-dessous est celui du
moteur de recherche de Commons, rien de plus.
## `kowosol` — *Annona muricata* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Soursop fruit.jpg | USGov | PD | 365×274 | [voir](https://commons.wikimedia.org/wiki/File:Soursop_fruit.jpg) |
| 2 | Annona muricata 1.jpg | Damien Boilley from suburbs of Paris, France | CC-BY-2.0 | 960×1280 | [voir](https://commons.wikimedia.org/wiki/File:Annona_muricata_1.jpg) |
| 3 | Annona muricata2.jpg | User:Hans_B. | PD | 2592×1944 | [voir](https://commons.wikimedia.org/wiki/File:Annona_muricata2.jpg) |
| 4 | Annona muricata Blanco1.196-cropped.jpg | Francisco Manuel Blanco (O.S.A.) | PD | 1300×1620 | [voir](https://commons.wikimedia.org/wiki/File:Annona_muricata_Blanco1.196-cropped.jpg) |
| 5 | Kleine zuurzak Maria Sibylla Merian 1705 plate III.png | Maria Sibylla Merian ; engraved by I. Mulder | PD | 1252×1852 | [voir](https://commons.wikimedia.org/wiki/File:Kleine_zuurzak_Maria_Sibylla_Merian_1705_plate_III.png) |
| 6 | Guanábana-2.jpg | ViajeroExtraviado | CC0-1.0 | 2446×2444 | [voir](https://commons.wikimedia.org/wiki/File:Guan%C3%A1bana-2.jpg) |
| 7 | Aksara Karo Pohon sirsak.jpg | Agus Damanik | CC-BY-SA-4.0 | 3906×5859 | [voir](https://commons.wikimedia.org/wiki/File:Aksara_Karo_Pohon_sirsak.jpg) |
| 8 | Un Corossolier 02.jpg | Bérenger504 | CC-BY-SA-4.0 | 6000×4000 | [voir](https://commons.wikimedia.org/wiki/File:Un_Corossolier_02.jpg) |
| 9 | Un Corossolier 01.jpg | Bérenger504 | CC-BY-SA-4.0 | 6000×4000 | [voir](https://commons.wikimedia.org/wiki/File:Un_Corossolier_01.jpg) |
| 10 | Un Corossolier 03.jpg | Bérenger504 | CC-BY-SA-4.0 | 6000×4000 | [voir](https://commons.wikimedia.org/wiki/File:Un_Corossolier_03.jpg) |
## `kenet` — *Melicoccus bijugatus* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Melicoccus bijugatus.jpg | No machine-readable author provided. Hans B.~commonswiki ass | PD | 2126×1757 | [voir](https://commons.wikimedia.org/wiki/File:Melicoccus_bijugatus.jpg) |
| 2 | Cebus capucinus Puntarenas Costa Rica.jpg | kansasphoto | CC-BY-2.0 | 3924×2616 | [voir](https://commons.wikimedia.org/wiki/File:Cebus_capucinus_Puntarenas_Costa_Rica.jpg) |
| 3 | Una rama de mamon.jpeg | EEIM | CC-BY-SA-3.0 | 3264×2448 | [voir](https://commons.wikimedia.org/wiki/File:Una_rama_de_mamon.jpeg) |
| 4 | Arbol de Huaya (Melicoccus bijugatus).jpg | Acarcano | CC-BY-SA-4.0 | 2336×4160 | [voir](https://commons.wikimedia.org/wiki/File:Arbol_de_Huaya_(Melicoccus_bijugatus).jpg) |
| 5 | Melicoccus bijugatus tree.jpg | daveynin | CC-BY-2.0 | 2304×3456 | [voir](https://commons.wikimedia.org/wiki/File:Melicoccus_bijugatus_tree.jpg) |
| 6 | Panelera Corozal El Triangulo 07.jpg | Akire gatuna | CC-BY-SA-4.0 | 2160×3840 | [voir](https://commons.wikimedia.org/wiki/File:Panelera_Corozal_El_Triangulo_07.jpg) |
| 7 | Starr-091104-9193-Melicoccus bijugatus-plant tag-Kahanu Gardens NTBG K | Forest and Kim Starr | CC-BY-3.0 | 3648×2736 | [voir](https://commons.wikimedia.org/wiki/File:Starr-091104-9193-Melicoccus_bijugatus-plant_tag-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24361925823).jpg) |
| 8 | Starr-091104-9194-Melicoccus bijugatus-trunk and canopy-Kahanu Gardens | Forest and Kim Starr | CC-BY-3.0 | 2736×3648 | [voir](https://commons.wikimedia.org/wiki/File:Starr-091104-9194-Melicoccus_bijugatus-trunk_and_canopy-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24870791022).jpg) |
| 9 | Starr-091104-9196-Melicoccus bijugatus-leaves-Kahanu Gardens NTBG Kael | Forest and Kim Starr | CC-BY-3.0 | 3648×2736 | [voir](https://commons.wikimedia.org/wiki/File:Starr-091104-9196-Melicoccus_bijugatus-leaves-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24361932503).jpg) |
| 10 | Starr-091104-9197-Melicoccus bijugatus-leaves-Kahanu Gardens NTBG Kael | Forest and Kim Starr | CC-BY-3.0 | 2736×3648 | [voir](https://commons.wikimedia.org/wiki/File:Starr-091104-9197-Melicoccus_bijugatus-leaves-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24870797672).jpg) |
## `gouyav` — *Psidium guajava* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Psidium guajava fruit (2).jpg | Own work | CC-BY-SA-3.0 | 744×768 | [voir](https://commons.wikimedia.org/wiki/File:Psidium_guajava_fruit_(2).jpg) |
| 2 | Apple Guava.jpg | Fuadsyazwan ( talk ) | PD | 1632×1224 | [voir](https://commons.wikimedia.org/wiki/File:Apple_Guava.jpg) |
| 3 | Starr-111012-8771-Psidium guajava-burnt fruit-Kahana-Maui (24488703784 | Forest and Kim Starr | CC-BY-3.0 | 2592×3456 | [voir](https://commons.wikimedia.org/wiki/File:Starr-111012-8771-Psidium_guajava-burnt_fruit-Kahana-Maui_(24488703784).jpg) |
| 4 | Fruta de Goiaba.jpg | Zezinho68 | CC-BY-SA-4.0 | 6016×4000 | [voir](https://commons.wikimedia.org/wiki/File:Fruta_de_Goiaba.jpg) |
| 5 | Guava Tree below the sky 01.jpg | Sabina Bajracharya | CC-BY-SA-4.0 | 3456×4608 | [voir](https://commons.wikimedia.org/wiki/File:Guava_Tree_below_the_sky_01.jpg) |
| 6 | Guava Tree below the sky 02.jpg | Sabina Bajracharya | CC-BY-SA-4.0 | 3456×4608 | [voir](https://commons.wikimedia.org/wiki/File:Guava_Tree_below_the_sky_02.jpg) |
| 7 | Guava Tree 161120.jpg | Sabina Bajracharya | CC-BY-SA-4.0 | 3024×4032 | [voir](https://commons.wikimedia.org/wiki/File:Guava_Tree_161120.jpg) |
| 8 | Guava Tree 161116.jpg | Sabina Bajracharya | CC-BY-SA-4.0 | 3024×4032 | [voir](https://commons.wikimedia.org/wiki/File:Guava_Tree_161116.jpg) |
| 9 | Guava Leaves.jpg | Arjot | CC-BY-SA-4.0 | 3000×4000 | [voir](https://commons.wikimedia.org/wiki/File:Guava_Leaves.jpg) |
| 10 | Common Guava.jpg | Gaurav Dhwaj Khadka | CC-BY-SA-4.0 | 3024×4032 | [voir](https://commons.wikimedia.org/wiki/File:Common_Guava.jpg) |
## `pom-site` — *Spondias dulcis* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Spondia dulcis Blanco1.132.png | Francisco Manuel Blanco (O.S.A.) | PD | 1417×2107 | [voir](https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.png) |
| 2 | Spondia dulcis Blanco1.132-cropped.jpg | Francisco Manuel Blanco (O.S.A.) | PD | 1270×1770 | [voir](https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132-cropped.jpg) |
| 3 | Spondia dulcis Blanco1.132.jpg | Francisco Manuel Blanco (O.S.A.) | PD | 1417×2107 | [voir](https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.jpg) |
| 4 | Starr 980529-4218 Spondias dulcis.jpg | Forest &amp; Kim Starr | CC-BY-3.0 | 1800×1200 | [voir](https://commons.wikimedia.org/wiki/File:Starr_980529-4218_Spondias_dulcis.jpg) |
| 5 | Owoce Śliwiec słodki.jpg | Agnieszka Kwiecień, Nova | CC-BY-3.0 | 1024×1024 | [voir](https://commons.wikimedia.org/wiki/File:Owoce_%C5%9Aliwiec_s%C5%82odki.jpg) |
| 6 | Spondias dulcis seeds.jpg | Tracey Slotta @ USDA-NRCS PLANTS Database | PD | 900×600 | [voir](https://commons.wikimedia.org/wiki/File:Spondias_dulcis_seeds.jpg) |
| 7 | 2014-10-11 Spondias dulcis Goldpflaume anagoria.JPG | Anagoria | CC-BY-3.0 | 3750×3168 | [voir](https://commons.wikimedia.org/wiki/File:2014-10-11_Spondias_dulcis_Goldpflaume_anagoria.JPG) |
| 8 | Buah kedondong by JJ.jpg | Rombituon | CC-BY-4.0 | 3000×4000 | [voir](https://commons.wikimedia.org/wiki/File:Buah_kedondong_by_JJ.jpg) |
| 9 | Spondias dulcis in Tropical Dream Center, Okinawa.jpg | M108t | CC-BY-4.0 | 3000×4000 | [voir](https://commons.wikimedia.org/wiki/File:Spondias_dulcis_in_Tropical_Dream_Center,_Okinawa.jpg) |
| 10 | Spondias dulcis leaves in Tropical Dream Center, Okinawa.jpg | M108t | CC-BY-4.0 | 4000×3000 | [voir](https://commons.wikimedia.org/wiki/File:Spondias_dulcis_leaves_in_Tropical_Dream_Center,_Okinawa.jpg) |
## `zikak` — *Chrysobalanus icaco* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Starr 031108-2161 Chrysobalanus icaco.jpg | Forest &amp; Kim Starr | CC-BY-3.0 | 1632×1224 | [voir](https://commons.wikimedia.org/wiki/File:Starr_031108-2161_Chrysobalanus_icaco.jpg) |
| 2 | Chrysobalanus icaco (inflorescense).jpg | Hans Hillewaert | CC-BY-SA-3.0 | 2473×3297 | [voir](https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_(inflorescense).jpg) |
| 3 | Flore médicale des Antilles, ou, Traité des plantes usuelles (Pl. 84) | Descourtilz, J. Theodore.; Descourtilz, M. E.; Pichard. | PD | 1567×2592 | [voir](https://commons.wikimedia.org/wiki/File:Flore_m%C3%A9dicale_des_Antilles,_ou,_Trait%C3%A9_des_plantes_usuelles_(Pl._84)_(8201963925).jpg) |
| 4 | Chrysobalanus icaco (Chrysobalanaceae) 01.jpg | Filo gèn' | CC-BY-SA-4.0 | 2112×2304 | [voir](https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_(Chrysobalanaceae)_01.jpg) |
| 5 | Fruit et feuilles de Chrysobalanus icaco (Chrysobalanaceae).jpg | Filo gèn' | CC-BY-SA-4.0 | 2321×3095 | [voir](https://commons.wikimedia.org/wiki/File:Fruit_et_feuilles_de_Chrysobalanus_icaco_(Chrysobalanaceae).jpg) |
| 6 | Icaques.jpg | Filo gèn' | CC-BY-SA-4.0 | 3008×2753 | [voir](https://commons.wikimedia.org/wiki/File:Icaques.jpg) |
| 7 | Icaques - fruits.jpg | Filo gèn' | CC-BY-SA-4.0 | 2950×3500 | [voir](https://commons.wikimedia.org/wiki/File:Icaques_-_fruits.jpg) |
| 8 | Foliorum compositio - Alterna.jpg | Filo gèn' | CC-BY-SA-4.0 | 620×720 | [voir](https://commons.wikimedia.org/wiki/File:Foliorum_compositio_-_Alterna.jpg) |
| 9 | Chrysobalanus icaco - Fruits 01.jpg | Filo gèn' | CC-BY-SA-4.0 | 1534×2048 | [voir](https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_-_Fruits_01.jpg) |
| 10 | Chrysobalanus icaco - Fruits 02.jpg | Filo gèn' | CC-BY-SA-4.0 | 2261×2528 | [voir](https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_-_Fruits_02.jpg) |
## `pom-kannel` — *Annona squamosa* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Annona squamosa (Custurd Apple) plant in Hyderabad, AP W IMG 9354.jpg | J.M.Garg | CC-BY-SA-4.0 | 800×533 | [voir](https://commons.wikimedia.org/wiki/File:Annona_squamosa_(Custurd_Apple)_plant_in_Hyderabad,_AP_W_IMG_9354.jpg) |
| 2 | Annona squamosa-fruits-leaves.jpg | Jim Conrad | PD | 650×419 | [voir](https://commons.wikimedia.org/wiki/File:Annona_squamosa-fruits-leaves.jpg) |
| 3 | Sharifa.JPG | Miansari66 | CC0-1.0 | 2816×2112 | [voir](https://commons.wikimedia.org/wiki/File:Sharifa.JPG) |
| 4 | Annona squamosa leaves at Madhurawada.JPG | Adityamadhav83 | CC-BY-SA-3.0 | 3839×2310 | [voir](https://commons.wikimedia.org/wiki/File:Annona_squamosa_leaves_at_Madhurawada.JPG) |
| 5 | Custard apple tree in Hainan - 04.JPG | Anna Frodesiak | CC0-1.0 | 4000×3000 | [voir](https://commons.wikimedia.org/wiki/File:Custard_apple_tree_in_Hainan_-_04.JPG) |
| 6 | 1901jfAnnona squamosa Tarlacfvf 01.JPG | Judgefloro | CC-BY-SA-4.0 | 4608×3456 | [voir](https://commons.wikimedia.org/wiki/File:1901jfAnnona_squamosa_Tarlacfvf_01.JPG) |
| 7 | Annona squamosa L. (9327977712).jpg | Dinesh Valke from Thane, India | CC-BY-SA-2.0 | 4284×5868 | [voir](https://commons.wikimedia.org/wiki/File:Annona_squamosa_L._(9327977712).jpg) |
| 8 | Annona squamosa in Jardin des Plantes de Toulouse 02.jpg | Krzysztof Golik | CC-BY-SA-4.0 | 4000×4722 | [voir](https://commons.wikimedia.org/wiki/File:Annona_squamosa_in_Jardin_des_Plantes_de_Toulouse_02.jpg) |
| 9 | 0158jfMalolos Historic Town Center Heritage Bulacanfvf 23.jpg | Judgefloro | CC0-1.0 | 4608×3456 | [voir](https://commons.wikimedia.org/wiki/File:0158jfMalolos_Historic_Town_Center_Heritage_Bulacanfvf_23.jpg) |
| 10 | Custard Apple - സീത പഴം 01.jpg | Shijan Kaakkara | CC-BY-SA-4.0 | 3648×2736 | [voir](https://commons.wikimedia.org/wiki/File:Custard_Apple_-_%E0%B4%B8%E0%B5%80%E0%B4%A4_%E0%B4%AA%E0%B4%B4%E0%B4%82_01.jpg) |
<details><summary>2 fichier(s) écarté(s) automatiquement</summary>
- File:Mygarden.JPG — licence non reconnue comme libre : Attribution
- File:Sugar apple on tree.jpg — licence non reconnue comme libre : GFDL 1.2
</details>
## `fwiyapen` — *Artocarpus altilis* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Artocarpus incisus Blanco2.267.png | Francisco Manuel Blanco (O.S.A.) | PD | 1379×2020 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_incisus_Blanco2.267.png) |
| 2 | Starr 031209-0031 Artocarpus altilis.jpg | Forest &amp; Kim Starr | CC-BY-3.0 | 1632×1224 | [voir](https://commons.wikimedia.org/wiki/File:Starr_031209-0031_Artocarpus_altilis.jpg) |
| 3 | Artocarpus altilis (fruit).jpg | Hans Hillewaert | CC-BY-SA-3.0 | 2848×3799 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_(fruit).jpg) |
| 4 | Artocarpus altilis 439799696.jpg | Bonnie Isaac | CC0-1.0 | 2048×1362 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_439799696.jpg) |
| 5 | Artocarpus altilis 399504710.jpg | Marilyne Busque-Dubois | CC-BY-4.0 | 1440×1080 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_399504710.jpg) |
| 6 | Artocarpus altilis 376055544.jpg | renjus box | CC-BY-4.0 | 2048×1401 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_376055544.jpg) |
| 7 | Artocarpus altilis 366760782.jpg | Akshay | CC0-1.0 | 2048×1536 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_366760782.jpg) |
| 8 | Artocarpus altilis 360470185.jpg | Mike Bowie | CC-BY-4.0 | 1536×2048 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_360470185.jpg) |
| 9 | Artocarpus altilis 355237308.jpg | monkeyjodey | CC0-1.0 | 1536×2048 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_355237308.jpg) |
| 10 | Artocarpus altilis 348826407.jpg | Kiwi Shen | CC-BY-4.0 | 1536×2048 | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_348826407.jpg) |
## `pom-dlo` — *Syzygium samarangense* (fruit)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Champanga flower buds.jpg | Vinayaraj | CC-BY-SA-3.0 | 2073×1590 | [voir](https://commons.wikimedia.org/wiki/File:Champanga_flower_buds.jpg) |
| 2 | Lainwu (Wax apple) diamond P00063.JPG | Taiwan7007 | CC-BY-3.0 | 308×330 | [voir](https://commons.wikimedia.org/wiki/File:Lainwu_(Wax_apple)_diamond_P00063.JPG) |
| 3 | 9956kfSyzygium samarangense Pampangafvf 05.JPG | Judgefloro | CC-BY-SA-4.0 | 4608×3456 | [voir](https://commons.wikimedia.org/wiki/File:9956kfSyzygium_samarangense_Pampangafvf_05.JPG) |
| 4 | Atlas der baumarten von Java (Figur 452) BHL47163274.jpg | Koorders, S. H.; Valeton, Theodoric | PD | 2145×3322 | [voir](https://commons.wikimedia.org/wiki/File:Atlas_der_baumarten_von_Java_(Figur_452)_BHL47163274.jpg) |
| 5 | 09564jfSan Rafael Bulacan Maasim River Diliman Paddy Vegetable Fields | Judgefloro | PD | 4608×3456 | [voir](https://commons.wikimedia.org/wiki/File:09564jfSan_Rafael_Bulacan_Maasim_River_Diliman_Paddy_Vegetable_Fields_Roadsfvf_12.JPG) |
| 6 | 09592jfSan Rafael Bulacan Syzygium samarangense Diliman Paddy Vegetabl | Judgefloro | PD | 4608×3456 | [voir](https://commons.wikimedia.org/wiki/File:09592jfSan_Rafael_Bulacan_Syzygium_samarangense_Diliman_Paddy_Vegetable_Fields_Roadsfvf_07.JPG) |
| 7 | Syzygium samarangense (Rose apple) tree in RDA, Bogra 02.jpg | Afifa Afrin | CC-BY-SA-3.0 | 3456×4608 | [voir](https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_(Rose_apple)_tree_in_RDA,_Bogra_02.jpg) |
| 8 | Syzygium samarangense (jamalac ou jambose).jpg | Filo gèn' | CC-BY-SA-4.0 | 4608×3456 | [voir](https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_(jamalac_ou_jambose).jpg) |
| 9 | Syzygium samarangense 16zz.jpg | Photo by David J. Stang | CC-BY-SA-4.0 | 2544×1696 | [voir](https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_16zz.jpg) |
| 10 | Syzygium samarangense 19zz.jpg | Photo by David J. Stang | CC-BY-SA-4.0 | 2544×1696 | [voir](https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_19zz.jpg) |
<details><summary>1 fichier(s) écarté(s) automatiquement</summary>
- File:Wax apple1.jpg — licence à attribution mais auteur introuvable dans les métadonnées
</details>
## `mansiniye` — *Hippomane mancinella* (plante_dangereuse)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Hippomane mancinella-Hocquart 1821.jpeg | M. Hocquart | PD | 363×500 | [voir](https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Hocquart_1821.jpeg) |
| 2 | Hyacinthus orientalis and Hippomane mancinella.gif | "The Universal Herbal" by Thomas Green (published 181620) | PD | 317×252 | [voir](https://commons.wikimedia.org/wiki/File:Hyacinthus_orientalis_and_Hippomane_mancinella.gif) |
| 3 | Hippomane mancinella-Jacquin.jpeg | Nicolás Joseph Jacquin | PD | 500×753 | [voir](https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Jacquin.jpeg) |
| 4 | Galapagos plants II 29.jpg | Klaus Schönitzer | CC-BY-SA-3.0 | 1500×2200 | [voir](https://commons.wikimedia.org/wiki/File:Galapagos_plants_II_29.jpg) |
| 5 | Mancenillier1.JPG | Mica | CC-BY-3.0 | 1536×2048 | [voir](https://commons.wikimedia.org/wiki/File:Mancenillier1.JPG) |
| 6 | Mancenillier2.JPG | Mica | CC-BY-3.0 | 1536×2048 | [voir](https://commons.wikimedia.org/wiki/File:Mancenillier2.JPG) |
| 7 | Hippomane mancinella (fruit).jpg | Hans Hillewaert | CC-BY-SA-3.0 | 3458×2592 | [voir](https://commons.wikimedia.org/wiki/File:Hippomane_mancinella_(fruit).jpg) |
| 8 | Hippomane mancenilla port.JPG | Pancrat | CC-BY-SA-3.0 | 1600×1200 | [voir](https://commons.wikimedia.org/wiki/File:Hippomane_mancenilla_port.JPG) |
| 9 | T. Green, The universal herbal Wellcome L0025496.jpg | https://wellcomeimages.org/indexplus/obf_images/a5/e8/28f318 | CC-BY-4.0 | 1568×1242 | [voir](https://commons.wikimedia.org/wiki/File:T._Green,_The_universal_herbal_Wellcome_L0025496.jpg) |
| 10 | Hippomane mancinella Costa Rica.jpg | Gabriele Kothe-Heinrich | CC-BY-SA-3.0 | 1200×900 | [voir](https://commons.wikimedia.org/wiki/File:Hippomane_mancinella_Costa_Rica.jpg) |
<details><summary>1 fichier(s) écarté(s) automatiquement</summary>
- File:The North American sylva, or, A description of the forest trees of the United States, Canada, and Nova Scotia, not described in the work of F. Andrew Michaux (microform) - and containing all the (20632692415).jpg — licence non reconnue comme libre : No restrictions
</details>
## `ake` — *Blighia sapida* (plante_dangereuse)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Ackee 001.jpg | Jerome Walker | CC-BY-SA-3.0 | 2848×2136 | [voir](https://commons.wikimedia.org/wiki/File:Ackee_001.jpg) |
| 2 | Walter Hood Fitch03.JPG | Walter Hood Fitch | PD | 1194×1732 | [voir](https://commons.wikimedia.org/wiki/File:Walter_Hood_Fitch03.JPG) |
| 3 | Owoce Aka.jpg | Agnieszka Kwiecień ( Nova ) | CC-BY-SA-3.0 | 1860×1860 | [voir](https://commons.wikimedia.org/wiki/File:Owoce_Aka.jpg) |
| 4 | Flore médicale des Antilles, ou, Traité des plantes usuelles (10559212 | Descourtilz, J. Theodore.; Descourtilz, M. E.; Pichard. | PD | 1557×2889 | [voir](https://commons.wikimedia.org/wiki/File:Flore_m%C3%A9dicale_des_Antilles,_ou,_Trait%C3%A9_des_plantes_usuelles_(10559212793).jpg) |
| 5 | Pomological Watercolor POM00007429.jpg | Newton, Amanda Almira, ca. 1860-1943 | PD | 2715×4000 | [voir](https://commons.wikimedia.org/wiki/File:Pomological_Watercolor_POM00007429.jpg) |
| 6 | Pommier daki à Taneka, Commune de Copargo, département de la Donga au | Saliousoft | CC-BY-SA-4.0 | 9216×6912 | [voir](https://commons.wikimedia.org/wiki/File:Pommier_d%E2%80%99aki_%C3%A0_Taneka,_Commune_de_Copargo,_d%C3%A9partement_de_la_Donga_au_B%C3%A9nin_01.jpg) |
| 7 | Blighia sapida3.jpg | DouglasGoldman | CC-BY-SA-4.0 | 1814×2710 | [voir](https://commons.wikimedia.org/wiki/File:Blighia_sapida3.jpg) |
| 8 | Blighia sapida5.jpg | DouglasGoldman | CC-BY-SA-4.0 | 1814×2710 | [voir](https://commons.wikimedia.org/wiki/File:Blighia_sapida5.jpg) |
| 9 | Blighia sapida8.jpg | DouglasGoldman | CC-BY-SA-4.0 | 2710×1814 | [voir](https://commons.wikimedia.org/wiki/File:Blighia_sapida8.jpg) |
| 10 | Blighia sapida10.jpg | DouglasGoldman | CC-BY-SA-4.0 | 2710×1814 | [voir](https://commons.wikimedia.org/wiki/File:Blighia_sapida10.jpg) |
## `pom-kajou` — *Anacardium occidentale* (plante_dangereuse)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Anacardium occidentale - Köhlers Medizinal-Pflanzen-010.jpg | Franz Eugen Köhler, Köhler's Medizinal-Pflanzen | PD | 425×589 | [voir](https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_-_K%C3%B6hler%E2%80%93s_Medizinal-Pflanzen-010.jpg) |
| 2 | Cashew2-flower.JPG | Aruna at Malayalam Wikipedia | CC-BY-SA-3.0 | 1024×768 | [voir](https://commons.wikimedia.org/wiki/File:Cashew2-flower.JPG) |
| 3 | Cashew apples.jpg | Abhishek Jacob | CC-BY-SA-3.0 | 2534×1982 | [voir](https://commons.wikimedia.org/wiki/File:Cashew_apples.jpg) |
| 4 | Cashew flower fruit seed.JPG | ସୁରଥ କୁମାର ପାଢ଼ୀ | CC-BY-SA-3.0 | 4000×3000 | [voir](https://commons.wikimedia.org/wiki/File:Cashew_flower_fruit_seed.JPG) |
| 5 | Anacardium occidentale Thailand 2013-05-03wb.JPG | Strobilomyces | CC-BY-SA-3.0 | 2816×2112 | [voir](https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_Thailand_2013-05-03wb.JPG) |
| 6 | Cashew 4334.JPG | Primejyothi | CC-BY-SA-3.0 | 3888×2592 | [voir](https://commons.wikimedia.org/wiki/File:Cashew_4334.JPG) |
| 7 | Cashew 4335.JPG | Primejyothi | CC-BY-SA-3.0 | 2592×3888 | [voir](https://commons.wikimedia.org/wiki/File:Cashew_4335.JPG) |
| 8 | Anacardium occidentale 01.JPG | Vinayaraj | CC-BY-SA-3.0 | 2580×3588 | [voir](https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_01.JPG) |
| 9 | Anacardium occidentale 08.JPG | Vinayaraj | CC-BY-SA-3.0 | 2532×3648 | [voir](https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_08.JPG) |
| 10 | Fleurs et noix de cajou.jpg | Xof | CC-BY-SA-4.0 | 4608×3456 | [voir](https://commons.wikimedia.org/wiki/File:Fleurs_et_noix_de_cajou.jpg) |
## `medisinye` — *Jatropha curcas* (plante_dangereuse)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Jatropha curcas Blanco2.384.jpg | Francisco Manuel Blanco (O.S.A.) | PD | 1411×2061 | [voir](https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384.jpg) |
| 2 | Jatropha curcas Blanco2.384-cropped.jpg | Francisco Manuel Blanco (O.S.A.) | PD | 1300×1870 | [voir](https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384-cropped.jpg) |
| 3 | Georg Forster - Purgiernuss.jpeg | Georg Forster | PD | 1836×2658 | [voir](https://commons.wikimedia.org/wiki/File:Georg_Forster_-_Purgiernuss.jpeg) |
| 4 | Jatropha curcas 11 (4350031767).jpg | Ton Rulkens from Mozambique | CC-BY-SA-2.0 | 768×1024 | [voir](https://commons.wikimedia.org/wiki/File:Jatropha_curcas_11_(4350031767).jpg) |
| 5 | Starr-120620-9733-Jatropha curcas-seedlings in duff-Kula Agriculture P | Forest and Kim Starr | CC-BY-3.0 | 3456×2592 | [voir](https://commons.wikimedia.org/wiki/File:Starr-120620-9733-Jatropha_curcas-seedlings_in_duff-Kula_Agriculture_Park-Maui_(25185489735).jpg) |
| 6 | Starr-120620-9735-Jatropha curcas-seedlings in debris near parent plan | Forest and Kim Starr | CC-BY-3.0 | 2592×3456 | [voir](https://commons.wikimedia.org/wiki/File:Starr-120620-9735-Jatropha_curcas-seedlings_in_debris_near_parent_plantings-Kula_Agriculture_Park-Maui_(24558649453).jpg) |
| 7 | Starr-120620-9736-Jatropha curcas-seedlings in debris near parent plan | Forest and Kim Starr | CC-BY-3.0 | 3456×2592 | [voir](https://commons.wikimedia.org/wiki/File:Starr-120620-9736-Jatropha_curcas-seedlings_in_debris_near_parent_plantings-Kula_Agriculture_Park-Maui_(25159146496).jpg) |
| 8 | Starr-120620-7537-Jatropha curcas-seedling in duff-Kula Agriculture Pa | Forest and Kim Starr | CC-BY-3.0 | 2736×3648 | [voir](https://commons.wikimedia.org/wiki/File:Starr-120620-7537-Jatropha_curcas-seedling_in_duff-Kula_Agriculture_Park-Maui_(24850192310).jpg) |
| 9 | Starr-120620-7538-Jatropha curcas-biofuel trial plantings-Kula Agricul | Forest and Kim Starr | CC-BY-3.0 | 3648×2736 | [voir](https://commons.wikimedia.org/wiki/File:Starr-120620-7538-Jatropha_curcas-biofuel_trial_plantings-Kula_Agriculture_Park-Maui_(25119515196).jpg) |
| 10 | Starr-120620-7541-Jatropha curcas-seedling-Kula Agriculture Park-Maui | Forest and Kim Starr | CC-BY-3.0 | 2736×3648 | [voir](https://commons.wikimedia.org/wiki/File:Starr-120620-7541-Jatropha_curcas-seedling-Kula_Agriculture_Park-Maui_(24519017633).jpg) |
<details><summary>1 fichier(s) écarté(s) automatiquement</summary>
- File:Jatropha curcas1 henning.jpg — licence à attribution mais auteur introuvable dans les métadonnées
</details>
## `lorye-jonn` — *Cascabela thevetia* (plante_dangereuse)
| # | fichier | auteur | licence | dimensions | page de description |
|---|---|---|---|---|---|
| 1 | Thevetia peruviana1.jpg | No machine-readable author provided. Hans B.~commonswiki ass | PD | 2592×1944 | [voir](https://commons.wikimedia.org/wiki/File:Thevetia_peruviana1.jpg) |
| 2 | Yellow Oleander (Thevetia peruviana) leaves & flowers in Kolkata W IMG | J.M.Garg | CC-BY-SA-3.0 | 619×600 | [voir](https://commons.wikimedia.org/wiki/File:Yellow_Oleander_(Thevetia_peruviana)_leaves_%26_flowers_in_Kolkata_W_IMG_8008.jpg) |
| 3 | Starr 060916-8881 Thevetia peruviana.jpg | Forest &amp; Kim Starr | CC-BY-3.0 | 2592×1944 | [voir](https://commons.wikimedia.org/wiki/File:Starr_060916-8881_Thevetia_peruviana.jpg) |
| 4 | Starr 080609-7918 Thevetia peruviana.jpg | Forest &amp; Kim Starr | CC-BY-3.0 | 2112×2816 | [voir](https://commons.wikimedia.org/wiki/File:Starr_080609-7918_Thevetia_peruviana.jpg) |
| 5 | Thevetia peruviana plant.jpg | Vinayaraj | CC-BY-SA-3.0 | 2556×3648 | [voir](https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_plant.jpg) |
| 6 | Tarrafal-Thevetia peruviana (2).jpg | Ji-Elle | CC-BY-SA-3.0 | 3648×2736 | [voir](https://commons.wikimedia.org/wiki/File:Tarrafal-Thevetia_peruviana_(2).jpg) |
| 7 | Cascabela thevetia 10.JPG | Vinayaraj | CC-BY-SA-3.0 | 3648×2736 | [voir](https://commons.wikimedia.org/wiki/File:Cascabela_thevetia_10.JPG) |
| 8 | Thevetia peruviana 'Alba' (338607342).jpg | Dinesh Valke from Thane, India | CC-BY-SA-2.0 | 2816×2112 | [voir](https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_%27Alba%27_(338607342).jpg) |
| 9 | Thevetia peruviana 15zz.jpg | Photo by David J. Stang | CC-BY-SA-4.0 | 3504×2336 | [voir](https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_15zz.jpg) |
| 10 | Thevetia peruviana 28zz.jpg | Photo by David J. Stang | CC-BY-SA-4.0 | 3504×2336 | [voir](https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_28zz.jpg) |
+171
View File
@@ -0,0 +1,171 @@
# Session 0 — Cadre et données
**Date :** 2026-07-27 · **Type de mission :** B (création *ex nihilo*) · **Code applicatif écrit : aucun.**
---
## Ce qui a été fait
**Gouvernance.** `git init` et commit de protection des documents de cadrage **avant toute
autre action** (playbook §5b.1 — atlas-fediverse avait été perdu faute de ce réflexe). Le
pack de référence `doc2sveltekit-transition/` reste local et non versionné, conformément au
playbook §0. Branche `main`.
**Cadre.** Cinq ADR, `LICENSE` (AGPL-3.0-or-later, texte canonique récupéré depuis gnu.org),
`LICENSE-CONTENT`, audit des sept sources, `SOURCES.md`, deux lettres-types.
**Outillage.** Six scripts dans `tools/data/`, tous hors bundle :
| Commande | Rôle |
|---|---|
| `npm run verify:taxa` | vérifie 13 taxons contre Wikidata (SPARQL) et GBIF |
| `npm run ingest:commons` | remonte les photos candidates sous licence libre |
| `npm run build:dataset` | compose les entrées ; refuse d'écraser sans `--force` |
| `npm run validate:data` | **la porte** — schéma + règles métier, sortie non nulle = build refusé |
| `npm run test:porte` | prouve que la porte refuse les 9 cas interdits |
| `npm run build:credits` | régénère `CREDITS.md` depuis les données |
| `npm run check:audio` | liste les enregistrements kréyòl manquants |
**Données.** 13 entrées dans `src/lib/data/fruits/`, 39 médias candidats, 0 validé.
---
## Ce que la vérification a appris
### La graine était bonne sur la taxonomie
**13 taxons sur 13** trouvés dans Wikidata par correspondance exacte sur `P225`, et
**13 sur 13** acceptés par GBIF en `matchType: EXACT`, `status: ACCEPTED`. **Zéro divergence**
sur les familles annoncées dans `fruits.seed.json`.
Y compris *Cascabela thevetia* pour le laurier-jaune, alors que le synonyme
*Thevetia peruviana* circule largement. Le contrôle du statut GBIF était écrit pour attraper
exactement ce cas ; il n'a rien trouvé à corriger. C'est le bon résultat, et il est
maintenant **vérifié plutôt que supposé**`docs/verification-taxons.md`.
### Aucune machine ne peut valider une photo
La recherche Commons sur *Melicoccus bijugatus* (kénèt) remonte en deuxième position une
photographie de **singe capucin** mangeant le fruit. Le moteur de recherche classe par
pertinence textuelle, pas par contenu botanique.
Cette observation a produit une décision de conception : le schéma distingue désormais
`photo`, `planche_botanique` et `image_generee`. Les fonds Commons contiennent beaucoup de
planches anciennes du domaine public — Blanco, Merian — exactes mais stylisées. Une planche
documente une fiche ; elle ne peut pas porter une épreuve de reconnaissance du réel.
Sur 39 médias candidats retenus : **25 photographies, 14 planches botaniques.**
### Le mancenillier n'a aucune photographie dans le haut de sa pile
Trois entrées comptent moins de deux photographies parmi leurs trois premiers candidats :
| entrée | photos sur 3 candidats | ce que Commons remonte en tête |
|---|---|---|
| `mansiniye` (mancenillier) | **0** | trois planches gravées — Jacquin 1780, Green 1816-20, Hocquart 1821 |
| `pom-site` (pòm-sitè) | **0** | planches, dont deux Blanco |
| `medisinye` (medsinyé) | 1 | |
C'est l'entrée la plus critique du module « Pa touché » qui est la moins bien servie. Un
enfant doit reconnaître un mancenillier **sur une plage**, pas sur une gravure de 1780. Il
faudra descendre plus bas dans les dix candidats de `docs/planche-relecture-medias.md`, ou
photographier l'arbre sur le littoral — il est signalé par une bande de peinture rouge, ce
qui rend la séance de terrain praticable et sans risque de confusion.
Le pré-tri qui produit cette classification a lui-même été corrigé en cours de session : la
planche de Jacquin ressortait d'abord en « photo » parce que ni son titre ni son auteur ne
disent son siècle. La date de prise de vue est désormais examinée, et toute date antérieure
à 1900 classe le média en planche. Ce pré-tri reste **un tri, pas un verdict** : c'est le
relecteur humain qui corrige le champ.
### TRAMIL : la situation est pire que ce que le brief supposait
Vérification directe le 2026-07-27 : le pied de page de `tramil.net` affiche
« © Copyright 2017 TRAMIL all rights reserved », et le lien « Legal notice » du site renvoie
une **404**. Les conditions d'usage ne sont donc même pas consultables. La demande écrite
n'est pas une précaution, c'est la seule voie.
### iNaturalist : 93 % de non commercial, mesuré
Échantillon de 305 photographies de qualité recherche sur *Chrysobalanus icaco* : 280 en
CC BY-NC, 12 en CC0, 8 en CC BY, 5 en CC BY-NC-SA. Se limiter au non-NC réduirait
iNaturalist à un appoint marginal — ce qui donne son poids réel à la décision du porteur.
---
## Écarts constatés et signalés, non corrigés en silence
Le brief §9 impose de signaler les écarts plutôt que de les corriger discrètement.
1. **Le champ `danger` de la graine a deux formes.** Les niveaux « vigilance » (kénèt,
pòm-kannèl) portent leur texte dans `note`, les niveaux « élevé » et « critique » dans
`resume`. Le schéma impose un champ unique : la composition normalise vers `resume`, sans
réécrire un mot. C'est la porte de validation qui a levé l'incohérence, pas une relecture.
2. **Trois identifiants divergent du nom kréyòl au-delà des accents** : `ake`/`aki`,
`medisinye`/`medsinyé`, `lorye-jonn`/`lorié-jòn`. Non tranchés — `docs/kreyol-a-relire.md`.
3. **Deux planches Blanco produisaient le même identifiant de média** une fois tronquées à
60 caractères. Désambiguïsées par suffixe plutôt que perdues.
4. **`comestible: false` sur l'akée et la pomme-cajou** est une sous-estimation assumée :
les deux se mangent sous conditions strictes. Le choix prudent était le seul défendable
sans arbitrage humain — `docs/a-arbitrer.md` §1.
5. **Le brief demandait 8 fruits ; 13 entrées ont été produites** (les 5 plantes du module
« Pa touché » incluses, sur décision du porteur). La vérification coûtait le même effort
et le contenu de sécurité demande le plus long délai de relecture.
---
## La porte de validation
Le brief §2 exigeait que le contrôle soit « un script de build, pas une consigne ».
`tools/data/validate.mjs` refuse :
- une épreuve ou un indice s'appuyant sur un média non validé, non photographique, de
filière B, ou dont la vue n'est pas renseignée ;
- un média à attribution dont l'auteur est absent ;
- un compositing sur un média en partage à l'identique ou sous clause non commerciale ;
- une validation sans nom de validateur ;
- une épreuve portée par une plante dangereuse ;
- une entrée publiée avec moins de deux photos validées, ou dont l'orthographe kréyòl n'est
pas relue par un humain nommé.
`npm run test:porte` fabrique ces neuf cas et vérifie que le refus se produit, plus un cas
témoin conforme qui doit passer. **10/10.** Une règle de sécurité qu'on n'a jamais vue
refuser quelque chose est une intention, pas une règle.
---
## Ce qui bloque la suite
| Blocage | Bloque | Qui peut le lever |
|---|---|---|
| 0 média validé | Rekonèt sur données réelles (session 2) | le porteur, `docs/planche-relecture-medias.md` |
| Aucun relecteur kréyòl désigné | toute publication | le porteur |
| 13 enregistrements manquants | le moment de révélation | une après-midi d'enregistrement |
| Saisonnalité non sourcée | publication du mode Sézon | CIRAD, lettre prête |
| 6 points non arbitrés | publication | le porteur, `docs/a-arbitrer.md` |
**Le premier travail non délégable est la planche de relecture des médias.** La session 1 ne
l'exige pas — les fiches affichent texte, taxonomie et crédits sans photo. La session 2, si.
---
## Vérifications de fin de session
```
npm run verify:taxa → 13 taxons, 0 divergence
npm run ingest:commons → 130 candidats, 0 taxon sous le seuil de 2
npm run validate:data → 13 entrées, 39 médias, 0 validé, 0 erreur
npm run test:porte → 10/10
npm run build:credits → 13 entrées, 39 médias, 0 sous clause NC
npm run check:audio → 13 enregistrements à réaliser
```
Dépendances installées : `ajv` et `ajv-formats` uniquement, toutes deux importées et
utilisées (playbook §2.2 — aucune dépendance installée sans être utilisée).
**Prochaine session : 1 — Socle.** Ne pas la démarrer sans avoir relu ce document et
`docs/plan.md`.
+22
View File
@@ -0,0 +1,22 @@
# Vérification taxonomique — Wikidata × GBIF
> Généré par `npm run verify:taxa` le 2026-07-27.
> Ne pas éditer à la main : rejouer le script quand la graine change.
| id | nom de la graine | Wikidata | famille WD | GBIF | statut GBIF | famille GBIF | écarts |
|---|---|---|---|---|---|---|---|
| `kowosol` | *Annona muricata* | Q1709343 | Annonaceae | 5407273 | ACCEPTED | Annonaceae | aucun |
| `kenet` | *Melicoccus bijugatus* | Q279728 | Sapindaceae | 3189990 | ACCEPTED | Sapindaceae | aucun |
| `gouyav` | *Psidium guajava* | Q166843 | Myrtaceae | 5420380 | ACCEPTED | Myrtaceae | aucun |
| `pom-site` | *Spondias dulcis* | Q500383 | Anacardiaceae | 3190595 | ACCEPTED | Anacardiaceae | aucun |
| `zikak` | *Chrysobalanus icaco* | Q577669 | Chrysobalanaceae | 2985082 | ACCEPTED | Chrysobalanaceae | aucun |
| `pom-kannel` | *Annona squamosa* | Q275620 | Annonaceae | 5407099 | ACCEPTED | Annonaceae | aucun |
| `fwiyapen` | *Artocarpus altilis* | Q14677 | Moraceae | 2984573 | ACCEPTED | Moraceae | aucun |
| `pom-dlo` | *Syzygium samarangense* | Q11643111 | Myrtaceae | 3183180 | ACCEPTED | Myrtaceae | aucun |
| `mansiniye` | *Hippomane mancinella* | Q636480 | Euphorbiaceae | 3063705 | ACCEPTED | Euphorbiaceae | aucun |
| `ake` | *Blighia sapida* | Q417145 | Sapindaceae | 3189955 | ACCEPTED | Sapindaceae | aucun |
| `pom-kajou` | *Anacardium occidentale* | Q34007 | Anacardiaceae | 5421368 | ACCEPTED | Anacardiaceae | aucun |
| `medisinye` | *Jatropha curcas* | Q74644 | Euphorbiaceae | 3072953 | ACCEPTED | Euphorbiaceae | aucun |
| `lorye-jonn` | *Cascabela thevetia* | Q10694475 | Apocynaceae | 3169652 | ACCEPTED | Apocynaceae | aucun |
**0 entrée(s) sur 13 présentent au moins un écart.**