# 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 | | `npm run rapport:manques` | mesure les manques, dans le projet et dans les fonds publics | **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. --- ## Ajout en cours de session — la dimension participative Décision du porteur : les manques ne se masquent pas, ils se publient. ADR 0006, guide [`contribuer.md`](../contribuer.md), inventaire mesuré [`manques.md`](../manques.md), et appel public à la libération des données TRAMIL en brouillon. ### Ce que la mesure a révélé **Le kréyòl est absent des communs numériques.** Wikidata enregistre **124 noms vernaculaires** pour les 13 espèces — 33 pour le fruit à pain, 22 pour la pomme d'eau, 12 pour la goyave, en chinois, anglais, portugais, slovène. **Zéro en kréyòl**, et aucune étiquette de langue `gcf` sur aucun des 13 items. C'est la contribution la moins coûteuse du projet — cinq minutes par entrée, aucun matériel — et l'une des plus durables. Elle suppose en revanche une orthographe relue : à faire après la relecture kréyòl, jamais avant. **L'écorce est la vue qui manque.** Après correction de la mesure, il reste 3 trous sur 65 dans les fonds libres, et les trois sont des écorces : mansiniyé (0 fichier), aki (0), kénèt (1). Trois autres sont tout juste au seuil. C'est cohérent avec la pratique — on photographie un fruit, rarement un tronc — et c'est fâcheux, parce que l'écorce est l'indice le plus fiable sur le terrain : un tronc est visible toute l'année, un fruit quelques mois. **Pl@ntNet est un meilleur canal de contribution que iNaturalist.** Mesuré sur le zikak en Guadeloupe : les images iNaturalist sont à ~93 % en CC BY-NC, celles de Pl@ntNet apparaissent en CC BY-SA (jeu de données GBIF sous CC BY 4.0). À effort égal pour le contributeur, la seconde voie produit des images pleinement réutilisables. D'où le conseil mis en avant dans le guide : régler sa licence par défaut sur iNaturalist une fois pour toutes. ### La langue devient participative — et la communauté existait déjà Second ajout du porteur : demander aux locuteurs, sur l'orthographe comme sur la prononciation, plutôt que d'attendre un relecteur unique. ADR 0005 amendé, protocole dans [`kreyol-participatif.md`](../kreyol-participatif.md). **Découverte en interrogeant Lingua Libre**, l'atelier d'enregistrement de Wikimedia : **456 enregistrements en kréyòl gwadloupéyen** y sont déjà publiés sous licence libre, versés pour l'essentiel par un contributeur nommé « Palé Kréyol ». Et **trois de nos treize noms s'y trouvaient déjà** — `gouyav`, `kénèt`, `zikak` — en CC BY-SA 4.0, **avec exactement notre graphie**. Trois entrées sortent donc du doute par corroboration externe, sans que le projet ait rien décidé, et trois enregistrements sont immédiatement utilisables. La leçon dépasse le cas : la question n'était pas de savoir qui trancherait, mais d'aller regarder si quelqu'un l'avait déjà fait. En regard, le kréyòl reste absent des données structurées : **0 lexème Wikidata** en kréyòl gwadloupéyen, 0 étiquette `gcf` sur les treize items. **Ce que le modèle de données gagne.** Trois états d'orthographe au lieu de deux — `a_relire`, `en_discussion`, `relu` — avec obligation de poser la question quand un doute est signalé ; un champ `variantes_gcf` qui conserve les usages proposés avec leur source et leur île, sans en effacer aucun ; un bloc `audio` qui porte source, licence, page d'origine et locuteur crédité. Quatre entrées passent en `en_discussion` : `ake`, `medisinye`, `lorye-jonn`, `pom-dlo`. **Un pis-aller assumé.** Les quatre questions sont rédigées en français. Demander en français à des locuteurs kréyòl de corriger du kréyòl est un contresens — mais les rédiger en kréyòl reviendrait à produire du kréyòl non relu au moment même où l'on reconnaît ne pas savoir le faire. Leur traduction est la première contribution demandée. ### Une mesure fausse, attrapée avant publication Le premier rapport annonçait **28 vues manquantes sur 65**. C'était faux. Le groupement `OR` de la recherche Commons ne se comporte pas comme attendu : sur *Annona muricata*, `section` seul remonte 17 fichiers là où `(section OR sliced OR cut OR coupe)` en remonte 0. Le signal d'alerte était que `coupe` ressortait à zéro pour les **treize** espèces — Commons contient évidemment des photos de corossol coupé. Après correction — un mot, une requête, avec gestion du débit des API —, le chiffre réel est **3 sur 65**. Publier les 28 aurait envoyé des bénévoles photographier ce qui existait déjà. La leçon est consignée dans l'ADR 0006 : une mesure qui produit un résultat extrême se suspecte avant de se publier, et une réponse d'API illisible ne se compte jamais comme un zéro. ## É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 npm run rapport:manques → 3 vues manquantes sur 65, 0 nom kréyòl sur Wikidata ``` 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`.