From 945a524b4499099adbc0665951f8ce7a793f2672 Mon Sep 17 00:00:00 2001 From: OKI Date: Sun, 26 Jul 2026 23:47:27 -0400 Subject: [PATCH] =?UTF-8?q?feat(session-0):=20cadre=20juridique,=20porte?= =?UTF-8?q?=20de=20validation=20et=20dataset=20v=C3=A9rifi=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CREDITS.md | 176 ++ LICENSE | 661 ++++++ LICENSE-CONTENT | 70 + README.md | 72 + SOURCES.md | 46 + docs/a-arbitrer.md | 151 ++ docs/adr/0001-licences.md | 90 + docs/adr/0002-phaser-hors-budget-initial.md | 63 + docs/adr/0003-frontiere-svelte-phaser.md | 59 + docs/adr/0004-filieres-assets-a-b.md | 83 + docs/adr/0005-kreyol-langue-principale.md | 78 + docs/audio-a-enregistrer.md | 22 + docs/audit-sources.md | 235 ++ docs/courriers/cirad.md | 69 + docs/courriers/tramil.md | 78 + docs/kreyol-a-relire.md | 110 + docs/plan.md | 197 ++ docs/planche-relecture-medias.md | 234 ++ docs/sessions/00-cadre-et-donnees.md | 171 ++ docs/verification-taxons.md | 22 + fruits.schema.json | 298 +++ package-lock.json | 96 + package.json | 24 + src/lib/data/fruits/ake.json | 127 ++ src/lib/data/fruits/fwiyapen.json | 135 ++ src/lib/data/fruits/gouyav.json | 134 ++ src/lib/data/fruits/kenet.json | 134 ++ src/lib/data/fruits/kowosol.json | 133 ++ src/lib/data/fruits/lorye-jonn.json | 129 ++ src/lib/data/fruits/mansiniye.json | 129 ++ src/lib/data/fruits/medisinye.json | 127 ++ src/lib/data/fruits/pom-dlo.json | 134 ++ src/lib/data/fruits/pom-kajou.json | 126 ++ src/lib/data/fruits/pom-kannel.json | 134 ++ src/lib/data/fruits/pom-site.json | 133 ++ src/lib/data/fruits/zikak.json | 132 ++ tools/data/build-credits.mjs | 131 ++ tools/data/build-dataset.mjs | 200 ++ tools/data/check-audio.mjs | 86 + tools/data/ingest-commons.mjs | 217 ++ tools/data/out/commons-candidats.json | 2258 +++++++++++++++++++ tools/data/out/taxa-verified.json | 343 +++ tools/data/test-porte.mjs | 194 ++ tools/data/validate.mjs | 163 ++ tools/data/verify-taxa.mjs | 195 ++ 45 files changed, 8599 insertions(+) create mode 100644 CREDITS.md create mode 100644 LICENSE create mode 100644 LICENSE-CONTENT create mode 100644 README.md create mode 100644 SOURCES.md create mode 100644 docs/a-arbitrer.md create mode 100644 docs/adr/0001-licences.md create mode 100644 docs/adr/0002-phaser-hors-budget-initial.md create mode 100644 docs/adr/0003-frontiere-svelte-phaser.md create mode 100644 docs/adr/0004-filieres-assets-a-b.md create mode 100644 docs/adr/0005-kreyol-langue-principale.md create mode 100644 docs/audio-a-enregistrer.md create mode 100644 docs/audit-sources.md create mode 100644 docs/courriers/cirad.md create mode 100644 docs/courriers/tramil.md create mode 100644 docs/kreyol-a-relire.md create mode 100644 docs/plan.md create mode 100644 docs/planche-relecture-medias.md create mode 100644 docs/sessions/00-cadre-et-donnees.md create mode 100644 docs/verification-taxons.md create mode 100644 fruits.schema.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/lib/data/fruits/ake.json create mode 100644 src/lib/data/fruits/fwiyapen.json create mode 100644 src/lib/data/fruits/gouyav.json create mode 100644 src/lib/data/fruits/kenet.json create mode 100644 src/lib/data/fruits/kowosol.json create mode 100644 src/lib/data/fruits/lorye-jonn.json create mode 100644 src/lib/data/fruits/mansiniye.json create mode 100644 src/lib/data/fruits/medisinye.json create mode 100644 src/lib/data/fruits/pom-dlo.json create mode 100644 src/lib/data/fruits/pom-kajou.json create mode 100644 src/lib/data/fruits/pom-kannel.json create mode 100644 src/lib/data/fruits/pom-site.json create mode 100644 src/lib/data/fruits/zikak.json create mode 100644 tools/data/build-credits.mjs create mode 100644 tools/data/build-dataset.mjs create mode 100644 tools/data/check-audio.mjs create mode 100644 tools/data/ingest-commons.mjs create mode 100644 tools/data/out/commons-candidats.json create mode 100644 tools/data/out/taxa-verified.json create mode 100644 tools/data/test-porte.mjs create mode 100644 tools/data/validate.mjs create mode 100644 tools/data/verify-taxa.mjs diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000..9398d89 --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,176 @@ +# Crédits — KI FWI SA YÉ ? + +> **Fichier généré.** Ne pas éditer à la main : `npm run build:credits`. +> Dernière génération : 2026-07-27. + +## Ce que couvre ce fichier + +Chaque média embarqué dans le jeu ou dans l’encyclopédie est listé ci-dessous avec son +auteur, sa licence et le lien vers sa page de description d’origine. Rien n’est +« libre de droit » : chaque ligne est une obligation contractuelle. + +Le code du projet est sous **AGPL-3.0-or-later** (`LICENSE`). Les textes rédigés par +ORGANISATION KA INTERNATIONALE sont sous **CC BY-SA 4.0** (`LICENSE-CONTENT`). Les médias +tiers restent sous leur licence propre : le jeu est une **œuvre collective**, pas une +œuvre dérivée — voir `docs/adr/0001-licences.md`. + +## Chiffres + +- 13 entrées · 39 médias +- 0 médias validés par un humain +- 12 médias en partage à l’identique (CC BY-SA) — **aucun compositing autorisé** +- 0 médias sous clause non commerciale (CC BY-NC) + +## Médias par entrée + +### aki — *Blighia sapida* (`ake`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q417145](https://www.wikidata.org/wiki/Q417145) +et [GBIF 3189955](https://www.gbif.org/species/3189955). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| ackee-001 | — | Jerome Walker | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Ackee_001.jpg) | +| walter-hood-fitch03 | — | Walter Hood Fitch | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Walter_Hood_Fitch03.JPG) | +| owoce-aka | — | Agnieszka Kwiecień ( Nova ) | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Owoce_Aka.jpg) | + +### fwiyapen — *Artocarpus altilis* (`fwiyapen`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q14677](https://www.wikidata.org/wiki/Q14677) +et [GBIF 2984573](https://www.gbif.org/species/2984573). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| artocarpus-incisus-blanco2-267 | — | Francisco Manuel Blanco (O.S.A.) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_incisus_Blanco2.267.png) | +| starr-031209-0031-artocarpus-altilis | — | Forest & Kim Starr | CC BY 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Starr_031209-0031_Artocarpus_altilis.jpg) | +| artocarpus-altilis-fruit | — | Hans Hillewaert | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_(fruit).jpg) | + +### gouyav — *Psidium guajava* (`gouyav`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q166843](https://www.wikidata.org/wiki/Q166843) +et [GBIF 5420380](https://www.gbif.org/species/5420380). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| psidium-guajava-fruit-2 | — | Own work | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Psidium_guajava_fruit_(2).jpg) | +| apple-guava | — | Fuadsyazwan ( talk ) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Apple_Guava.jpg) | +| starr-111012-8771-psidium-guajava-burnt-fruit-kahana-maui-24 | — | Forest and Kim Starr | CC BY 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Starr-111012-8771-Psidium_guajava-burnt_fruit-Kahana-Maui_(24488703784).jpg) | + +### kénèt — *Melicoccus bijugatus* (`kenet`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q279728](https://www.wikidata.org/wiki/Q279728) +et [GBIF 3189990](https://www.gbif.org/species/3189990). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| melicoccus-bijugatus | — | No machine-readable author provided. Hans B.~commonswiki assumed (based on copyright claims). | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Melicoccus_bijugatus.jpg) | +| cebus-capucinus-puntarenas-costa-rica | — | kansasphoto | CC BY 2.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Cebus_capucinus_Puntarenas_Costa_Rica.jpg) | +| una-rama-de-mamon | — | EEIM | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Una_rama_de_mamon.jpeg) | + +### kowosòl — *Annona muricata* (`kowosol`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q1709343](https://www.wikidata.org/wiki/Q1709343) +et [GBIF 5407273](https://www.gbif.org/species/5407273). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| soursop-fruit | — | USGov | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Soursop_fruit.jpg) | +| annona-muricata-1 | — | Damien Boilley from suburbs of Paris, France | CC BY 2.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Annona_muricata_1.jpg) | +| annona-muricata2 | — | User:Hans_B. | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Annona_muricata2.jpg) | + +### lorié-jòn — *Cascabela thevetia* (`lorye-jonn`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q10694475](https://www.wikidata.org/wiki/Q10694475) +et [GBIF 3169652](https://www.gbif.org/species/3169652). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| thevetia-peruviana1 | — | No machine-readable author provided. Hans B.~commonswiki assumed (based on copyright claims). | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Thevetia_peruviana1.jpg) | +| yellow-oleander-thevetia-peruviana-leaves-flowers-in-kolkata | — | J.M.Garg | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Yellow_Oleander_(Thevetia_peruviana)_leaves_%26_flowers_in_Kolkata_W_IMG_8008.jpg) | +| starr-060916-8881-thevetia-peruviana | — | Forest & Kim Starr | CC BY 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Starr_060916-8881_Thevetia_peruviana.jpg) | + +### mansiniyé — *Hippomane mancinella* (`mansiniye`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q636480](https://www.wikidata.org/wiki/Q636480) +et [GBIF 3063705](https://www.gbif.org/species/3063705). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| hippomane-mancinella-hocquart-1821 | — | M. Hocquart | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Hocquart_1821.jpeg) | +| hyacinthus-orientalis-and-hippomane-mancinella | — | "The Universal Herbal" by Thomas Green (published 1816–20) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Hyacinthus_orientalis_and_Hippomane_mancinella.gif) | +| hippomane-mancinella-jacquin | — | Nicolás Joseph Jacquin | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Jacquin.jpeg) | + +### medsinyé — *Jatropha curcas* (`medisinye`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q74644](https://www.wikidata.org/wiki/Q74644) +et [GBIF 3072953](https://www.gbif.org/species/3072953). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| jatropha-curcas-blanco2-384 | — | Francisco Manuel Blanco (O.S.A.) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384.jpg) | +| jatropha-curcas-blanco2-384-cropped | — | Francisco Manuel Blanco (O.S.A.) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384-cropped.jpg) | +| georg-forster-purgiernuss | — | Georg Forster | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Georg_Forster_-_Purgiernuss.jpeg) | + +### pòm-dlo — *Syzygium samarangense* (`pom-dlo`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q11643111](https://www.wikidata.org/wiki/Q11643111) +et [GBIF 3183180](https://www.gbif.org/species/3183180). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| champanga-flower-buds | — | Vinayaraj | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Champanga_flower_buds.jpg) | +| lainwu-wax-apple-diamond-p00063 | — | Taiwan7007 | CC BY 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Lainwu_(Wax_apple)_diamond_P00063.JPG) | +| 9956kfsyzygium-samarangense-pampangafvf-05 | — | Judgefloro | CC BY-SA 4.0 | non | [voir](https://commons.wikimedia.org/wiki/File:9956kfSyzygium_samarangense_Pampangafvf_05.JPG) | + +### pòm-kajou — *Anacardium occidentale* (`pom-kajou`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q34007](https://www.wikidata.org/wiki/Q34007) +et [GBIF 5421368](https://www.gbif.org/species/5421368). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| anacardium-occidentale-kohler-s-medizinal-pflanzen-010 | — | Franz Eugen Köhler, Köhler's Medizinal-Pflanzen | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_-_K%C3%B6hler%E2%80%93s_Medizinal-Pflanzen-010.jpg) | +| cashew2-flower | — | Aruna at Malayalam Wikipedia | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Cashew2-flower.JPG) | +| cashew-apples | — | Abhishek Jacob | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Cashew_apples.jpg) | + +### pòm-kannèl — *Annona squamosa* (`pom-kannel`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q275620](https://www.wikidata.org/wiki/Q275620) +et [GBIF 5407099](https://www.gbif.org/species/5407099). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| annona-squamosa-custurd-apple-plant-in-hyderabad-ap-w-img-93 | — | J.M.Garg | CC BY-SA 4.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Annona_squamosa_(Custurd_Apple)_plant_in_Hyderabad,_AP_W_IMG_9354.jpg) | +| annona-squamosa-fruits-leaves | — | Jim Conrad | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Annona_squamosa-fruits-leaves.jpg) | +| sharifa | — | Miansari66 | CC0 1.0 (domaine public volontaire) | non | [voir](https://commons.wikimedia.org/wiki/File:Sharifa.JPG) | + +### pòm-sitè — *Spondias dulcis* (`pom-site`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q500383](https://www.wikidata.org/wiki/Q500383) +et [GBIF 3190595](https://www.gbif.org/species/3190595). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| spondia-dulcis-blanco1-132 | — | Francisco Manuel Blanco (O.S.A.) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.png) | +| spondia-dulcis-blanco1-132-cropped | — | Francisco Manuel Blanco (O.S.A.) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132-cropped.jpg) | +| spondia-dulcis-blanco1-132-2 | — | Francisco Manuel Blanco (O.S.A.) | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.jpg) | + +### zikak — *Chrysobalanus icaco* (`zikak`) + +Taxonomie vérifiée le 2026-07-27 contre [Wikidata Q577669](https://www.wikidata.org/wiki/Q577669) +et [GBIF 2985082](https://www.gbif.org/species/2985082). + +| média | vue | auteur | licence | validé | page d’origine | +|---|---|---|---|---|---| +| starr-031108-2161-chrysobalanus-icaco | — | Forest & Kim Starr | CC BY 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Starr_031108-2161_Chrysobalanus_icaco.jpg) | +| chrysobalanus-icaco-inflorescense | — | Hans Hillewaert | CC BY-SA 3.0 | non | [voir](https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_(inflorescense).jpg) | +| flore-medicale-des-antilles-ou-traite-des-plantes-usuelles-p | — | Descourtilz, J. Theodore.; Descourtilz, M. E.; Pichard. | domaine public | non | [voir](https://commons.wikimedia.org/wiki/File:Flore_m%C3%A9dicale_des_Antilles,_ou,_Trait%C3%A9_des_plantes_usuelles_(Pl._84)_(8201963925).jpg) | + +## Sources factuelles + +- **Wikidata** — identifiants et taxonomie (CC0). https://www.wikidata.org +- **GBIF** — noms scientifiques acceptés et clés d’usage. https://www.gbif.org +- **Wikimedia Commons** — photographies. https://commons.wikimedia.org + +Voir `SOURCES.md` pour le détail des régimes de licence et `docs/audit-sources.md` +pour l’audit complet, TRAMIL et CIRAD compris. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/LICENSE-CONTENT b/LICENSE-CONTENT new file mode 100644 index 0000000..0b90d3a --- /dev/null +++ b/LICENSE-CONTENT @@ -0,0 +1,70 @@ +LICENCE DU CONTENU — KI FWI SA YÉ ? +==================================== + +Ce fichier concerne le CONTENU du projet. Le CODE est couvert par le fichier +`LICENSE` (GNU Affero General Public License, version 3 ou ultérieure). + + +1. Contenu produit par ORGANISATION KA INTERNATIONALE +------------------------------------------------------ + +Les textes rédigés pour ce projet — descriptions d'indices botaniques, fiches +encyclopédiques, textes du module « Pa touché », interface, documentation — ainsi +que les jeux de données structurées (`src/lib/data/`) sont mis à disposition sous : + + Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 + International (CC BY-SA 4.0) + + Résumé : https://creativecommons.org/licenses/by-sa/4.0/deed.fr + Texte légal : https://creativecommons.org/licenses/by-sa/4.0/legalcode.fr + +Attribution demandée : + + « KI FWI SA YÉ ? » — ORGANISATION KA INTERNATIONALE (o-k-i.net), CC BY-SA 4.0 + + +2. Médias tiers — leur licence propre s'applique, pas celle-ci +--------------------------------------------------------------- + +Les photographies, illustrations et enregistrements provenant de tiers (Wikimedia +Commons, iNaturalist, contributeurs individuels) NE SONT PAS relicenciés par ce +fichier. Chacun reste sous sa licence d'origine, listée média par média dans +`CREDITS.md` et dans les données (`src/lib/data/fruits/*.json`). + +Le projet constitue à leur égard une ŒUVRE COLLECTIVE : les médias y sont +juxtaposés, jamais fondus dans une œuvre dérivée. Cette distinction est ce qui +permet de faire cohabiter des médias CC BY-SA et des médias CC BY-NC dans un même +produit. Elle impose une contrainte technique absolue : + + AUCUN COMPOSITING. Un média tiers n'est jamais fusionné, incrusté, détouré + puis recombiné, ni intégré à un atlas de textures avec d'autres médias. + +Cette contrainte est vérifiée par script : `npm run validate:data` refuse tout +média marqué `composite: true` dès lors qu'il porte une clause de partage à +l'identique ou une clause non commerciale. + + +3. Clause non commerciale — engagement irréversible +----------------------------------------------------- + +Le projet accepte des médias sous licence Creative Commons Attribution - Pas +d'Utilisation Commerciale (CC BY-NC). En conséquence, et tant que ces médias sont +embarqués : + + « KI FWI SA YÉ ? » NE PEUT PAS être distribué à titre commercial. + Ni vente, ni version payante, ni licence à un éditeur, ni intégration dans + une offre commerciale. + +Le code, lui, reste librement réutilisable sous AGPL-3.0-or-later, y compris à +titre commercial, dès lors qu'il est séparé de ces médias. + +Décision, motifs et condition de réexamen : `docs/adr/0001-licences.md`. + + +4. Enregistrements audio kréyòl +--------------------------------- + +Les enregistrements de prononciation sont réalisés par des locuteurs humains qui +en conservent les droits voisins. Chaque locuteur doit avoir donné une autorisation +écrite avant embarquement, et est crédité nominativement dans `CREDITS.md`. +Aucune synthèse vocale n'est utilisée. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0c97301 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# KI FWI SA YÉ ? + +Jeu éducatif libre qui apprend aux enfants des Antilles à reconnaître les fruits, les arbres +et les plantes de leurs îles. Le kréyòl est la langue principale ; le français en est la +traduction. + +Porté par **ORGANISATION KA INTERNATIONALE** — [o-k-i.net](https://o-k-i.net). + +> **État : session 0 terminée.** Cadre juridique, outillage de données et dataset vérifié. +> Aucun code applicatif n'est encore écrit. Voir [`docs/plan.md`](docs/plan.md). + +## Le principe + +Le jeu enseigne la reconnaissance du **réel**. Deux filières d'assets, jamais mélangées : + +- **Filière A — vérité.** Photographies réelles. Seule filière autorisée pour tout ce qui + sert à identifier : épreuves, indices, fiches. +- **Filière B — décor.** Images générées. Fonds, sprites, badges. Jamais une épreuve. + +Les modèles de diffusion connaissent mal le corossol, à peine la quenette, presque pas le +zikak. Ils produisent des fruits *plausibles et faux*. Un jeu d'identification bâti sur des +assets générés apprend l'erreur. + +Cette règle n'est pas une consigne : c'est un script. `npm run validate:data` fait échouer +le build si une épreuve s'appuie sur un média non validé, et `npm run test:porte` prouve que +ce refus se produit. + +## Commandes + +```bash +npm install +npm run verify:taxa # vérifie la taxonomie contre Wikidata et GBIF +npm run ingest:commons # remonte les photos candidates sous licence libre +npm run build:dataset # compose les entrées (--force pour écraser) +npm run validate:data # la porte : schéma + règles métier +npm run test:porte # prouve que la porte refuse ce qu'elle doit refuser +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 +``` + +Ces scripts vivent dans `tools/data/`, hors du bundle. **Aucun appel réseau ne subsistera au +runtime du jeu** : tout est cuit au build. + +## Où regarder + +| Fichier | Contenu | +|---|---| +| [`docs/plan.md`](docs/plan.md) | les 7 sessions et leurs portes de sortie mesurables | +| [`docs/adr/`](docs/adr/) | les cinq décisions d'architecture et leurs motifs | +| [`docs/audit-sources.md`](docs/audit-sources.md) | ce qu'on prend à chaque source, sous quelle licence | +| [`docs/a-arbitrer.md`](docs/a-arbitrer.md) | ce qu'un humain doit trancher avant publication | +| [`docs/kreyol-a-relire.md`](docs/kreyol-a-relire.md) | les incertitudes orthographiques, signalées non corrigées | +| [`docs/planche-relecture-medias.md`](docs/planche-relecture-medias.md) | les 130 photos candidates à valider | +| [`fruits.schema.json`](fruits.schema.json) | le contrat des données | +| [`CREDITS.md`](CREDITS.md) | attributions, généré — ne pas éditer | + +## Licences + +- **Code :** [AGPL-3.0-or-later](LICENSE) +- **Contenu OKI :** [CC BY-SA 4.0](LICENSE-CONTENT) +- **Médias tiers :** licence d'origine conservée, listée média par média dans + [`CREDITS.md`](CREDITS.md). Le jeu est une œuvre **collective**, pas dérivée — d'où + l'interdiction absolue de compositing, vérifiée par script. + +Rien n'est « libre de droit ». Voir [`SOURCES.md`](SOURCES.md) et +[`docs/adr/0001-licences.md`](docs/adr/0001-licences.md). + +## Ce que le code ne fera jamais + +Aucun compte, aucune publicité, aucun traceur, aucune requête vers un domaine tiers au +runtime, aucune collecte de données sur les enfants. Le jeu est entièrement jouable hors +ligne après une première visite. diff --git a/SOURCES.md b/SOURCES.md new file mode 100644 index 0000000..de2bdbc --- /dev/null +++ b/SOURCES.md @@ -0,0 +1,46 @@ +# Sources — KI FWI SA YÉ ? + +Rien n'est « libre de droit ». Chaque source a un régime, chaque régime a une contrainte. +Ce fichier en donne l'état ; l'audit détaillé est dans [`docs/audit-sources.md`](docs/audit-sources.md), +les attributions média par média dans [`CREDITS.md`](CREDITS.md), et la décision de licence +dans [`docs/adr/0001-licences.md`](docs/adr/0001-licences.md). + +## Sources utilisées + +| Source | Usage | Régime | Contrainte principale | +|---|---|---|---| +| [Wikidata](https://www.wikidata.org) | identifiants Q, taxonomie | CC0 | croiser avec GBIF, toujours | +| [GBIF](https://www.gbif.org) | nom accepté, clé d'usage, famille | données ouvertes | détecte les synonymes | +| [Wikimedia Commons](https://commons.wikimedia.org) | photographies, planches | CC0 · PD · CC BY · CC BY-SA | attribution nominative · **aucun compositing** | +| [iNaturalist](https://www.inaturalist.org) | photographies de complément | ~93 % CC BY-NC | engage le non-commercial | +| Photographies du porteur | tout, en priorité | CC BY-SA 4.0 (OKI) | aucune | + +## Sources citées, jamais copiées + +| Source | Usage | Régime | Statut | +|---|---|---|---| +| [TRAMIL](https://www.tramil.net) | vérification factuelle | tous droits réservés | **demande écrite en attente** | +| [Agritrop / CIRAD](https://agritrop.cirad.fr) | vérification agronomique | mixte, majoritairement © | **demande écrite en attente** | +| [INRAE](https://www.inrae.fr) | vérification | mixte | **demande écrite en attente** | + +Aucun fichier issu de ces trois sources n'entre dans le dépôt. Elles se citent dans le +champ `sources_factuelles` des entrées, avec titre, URL et date de consultation. + +## Vérification + +La taxonomie est vérifiée par script contre les deux référentiels, jamais de mémoire : + +```bash +npm run verify:taxa +``` + +Rapport : [`docs/verification-taxons.md`](docs/verification-taxons.md). +Dernier passage — **13 taxons, 13 acceptés par GBIF, 0 divergence**. + +## Ce qui bloque une publication + +Un média ne peut porter une épreuve d'identification que s'il est une photographie réelle, +de filière A, validée par un humain nommé, avec sa vue renseignée. Un enregistrement audio +doit être une voix humaine. Une orthographe kréyòl doit être relue par un locuteur. Ces +règles sont vérifiées par `npm run validate:data` et prouvées par `npm run test:porte` : +ce ne sont pas des intentions. diff --git a/docs/a-arbitrer.md b/docs/a-arbitrer.md new file mode 100644 index 0000000..18730e6 --- /dev/null +++ b/docs/a-arbitrer.md @@ -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 | diff --git a/docs/adr/0001-licences.md b/docs/adr/0001-licences.md new file mode 100644 index 0000000..4e22088 --- /dev/null +++ b/docs/adr/0001-licences.md @@ -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. diff --git a/docs/adr/0002-phaser-hors-budget-initial.md b/docs/adr/0002-phaser-hors-budget-initial.md new file mode 100644 index 0000000..a26919a --- /dev/null +++ b/docs/adr/0002-phaser-hors-budget-initial.md @@ -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. diff --git a/docs/adr/0003-frontiere-svelte-phaser.md b/docs/adr/0003-frontiere-svelte-phaser.md new file mode 100644 index 0000000..4c2f140 --- /dev/null +++ b/docs/adr/0003-frontiere-svelte-phaser.md @@ -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. diff --git a/docs/adr/0004-filieres-assets-a-b.md b/docs/adr/0004-filieres-assets-a-b.md new file mode 100644 index 0000000..6c29bd3 --- /dev/null +++ b/docs/adr/0004-filieres-assets-a-b.md @@ -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. diff --git a/docs/adr/0005-kreyol-langue-principale.md b/docs/adr/0005-kreyol-langue-principale.md new file mode 100644 index 0000000..7ec0dfb --- /dev/null +++ b/docs/adr/0005-kreyol-langue-principale.md @@ -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. diff --git a/docs/audio-a-enregistrer.md b/docs/audio-a-enregistrer.md new file mode 100644 index 0000000..30df326 --- /dev/null +++ b/docs/audio-a-enregistrer.md @@ -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/.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)_ diff --git a/docs/audit-sources.md b/docs/audit-sources.md new file mode 100644 index 0000000..ee7848b --- /dev/null +++ b/docs/audit-sources.md @@ -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=&strict=false +GET https://api.gbif.org/v1/species/ # 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="" 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=&quality_grade=research + &photo_license=cc0,cc-by,cc-by-sa,cc-by-nc,cc-by-nc-sa + &place_id= # 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. diff --git a/docs/courriers/cirad.md b/docs/courriers/cirad.md new file mode 100644 index 0000000..c8a002f --- /dev/null +++ b/docs/courriers/cirad.md @@ -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.** diff --git a/docs/courriers/tramil.md b/docs/courriers/tramil.md new file mode 100644 index 0000000..b5a54de --- /dev/null +++ b/docs/courriers/tramil.md @@ -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.** diff --git a/docs/kreyol-a-relire.md b/docs/kreyol-a-relire.md new file mode 100644 index 0000000..70912d4 --- /dev/null +++ b/docs/kreyol-a-relire.md @@ -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/.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 +``` diff --git a/docs/plan.md b/docs/plan.md new file mode 100644 index 0000000..1019ce6 --- /dev/null +++ b/docs/plan.md @@ -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. diff --git a/docs/planche-relecture-medias.md b/docs/planche-relecture-medias.md new file mode 100644 index 0000000..37efec5 --- /dev/null +++ b/docs/planche-relecture-medias.md @@ -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/.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 & 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 & 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) | + +
2 fichier(s) écarté(s) automatiquement + +- File:Mygarden.JPG — licence non reconnue comme libre : Attribution +- File:Sugar apple on tree.jpg — licence non reconnue comme libre : GFDL 1.2 + +
+ +## `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 & 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) | + +
1 fichier(s) écarté(s) automatiquement + +- File:Wax apple1.jpg — licence à attribution mais auteur introuvable dans les métadonnées + +
+ +## `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 1816–20) | 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) | + +
1 fichier(s) écarté(s) automatiquement + +- 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 + +
+ +## `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 d’aki à 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öhler–s 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) | + +
1 fichier(s) écarté(s) automatiquement + +- File:Jatropha curcas1 henning.jpg — licence à attribution mais auteur introuvable dans les métadonnées + +
+ +## `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 & 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 & 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) | diff --git a/docs/sessions/00-cadre-et-donnees.md b/docs/sessions/00-cadre-et-donnees.md new file mode 100644 index 0000000..65c1bd0 --- /dev/null +++ b/docs/sessions/00-cadre-et-donnees.md @@ -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`. diff --git a/docs/verification-taxons.md b/docs/verification-taxons.md new file mode 100644 index 0000000..493b205 --- /dev/null +++ b/docs/verification-taxons.md @@ -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.** diff --git a/fruits.schema.json b/fruits.schema.json new file mode 100644 index 0000000..a330d7b --- /dev/null +++ b/fruits.schema.json @@ -0,0 +1,298 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://o-k-i.net/ki-fwi/fruits.schema.json", + "title": "Entrée du dataset KI FWI SA YÉ ?", + "description": "Un fruit ou une plante dangereuse. Un fichier par entrée dans src/lib/data/fruits/. Le kréyòl est la langue principale : noms.gcf est le nom de l'entrée, les autres langues en sont la traduction (ADR 0005).", + "type": "object", + "additionalProperties": false, + "required": [ + "id", + "categorie", + "noms", + "orthographe", + "taxon", + "iles", + "comestible", + "danger", + "indices", + "medias", + "audio", + "sources_factuelles", + "valide" + ], + "properties": { + "$schema": { "type": "string" }, + "$comment": { "type": "string" }, + + "id": { + "type": "string", + "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$", + "description": "Identifiant technique stable, sans diacritique. Sert de nom de fichier et de segment d'URL. Ne se renomme jamais après publication." + }, + + "categorie": { + "enum": ["fruit", "plante_dangereuse"] + }, + + "noms": { + "type": "object", + "additionalProperties": false, + "required": ["gcf"], + "properties": { + "gcf": { "type": "string", "minLength": 1, "description": "Nom kréyòl — nom principal de l'entrée." }, + "fr": { "type": "string" }, + "en": { "type": "string" }, + "es": { "type": "string" } + } + }, + + "orthographe": { + "type": "object", + "additionalProperties": false, + "required": ["norme", "statut", "relu_par"], + "properties": { + "norme": { + "enum": ["gwadloupeyen"], + "description": "Norme unique du projet (ADR 0005). Ne jamais mélanger avec le matinitjé." + }, + "statut": { + "enum": ["a_relire", "relu"], + "description": "Passe à 'relu' uniquement quand un locuteur humain a tranché. Aucun agent ne peut le faire." + }, + "relu_par": { + "type": ["string", "null"], + "description": "Nom du relecteur humain. Obligatoirement non nul quand statut = relu." + } + } + }, + + "taxon": { + "type": "object", + "additionalProperties": false, + "required": ["scientifique", "famille", "wikidata", "gbif", "verifie_le", "verifie_contre"], + "properties": { + "scientifique": { "type": "string", "minLength": 3 }, + "famille": { "type": "string", "pattern": "^[A-Z][a-z]+aceae$" }, + "wikidata": { "type": "string", "pattern": "^Q[1-9][0-9]*$" }, + "gbif": { "type": "integer", "minimum": 1 }, + "verifie_le": { "type": "string", "format": "date" }, + "verifie_contre": { + "type": "array", + "minItems": 2, + "uniqueItems": true, + "items": { "enum": ["wikidata", "gbif"] }, + "description": "Le brief §8 exige les deux référentiels. Un seul ne suffit pas." + } + } + }, + + "iles": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { "enum": ["gp", "mq", "gf", "re"] } + }, + + "saison_mois": { + "type": "array", + "uniqueItems": true, + "items": { "type": "integer", "minimum": 1, "maximum": 12 }, + "description": "Mois de disponibilité. Alimente le mode Sézon. Varie selon l'île : à affiner avec le terrain." + }, + + "comestible": { "type": "boolean" }, + + "danger": { + "oneOf": [ + { "type": "null" }, + { + "type": "object", + "additionalProperties": false, + "required": ["niveau", "resume"], + "properties": { + "niveau": { "enum": ["vigilance", "eleve", "critique"] }, + "resume": { "type": "string", "minLength": 10 }, + "note": { "type": "string" }, + "signalement": { "type": "string" }, + "conduite": { "type": "string", "description": "Conduite à tenir en cas d'exposition. Ton factuel, jamais anxiogène (brief §6)." } + } + } + ] + }, + + "indices": { + "type": "object", + "additionalProperties": false, + "description": "Les indices lisibles sur le terrain. Alimentent le mode Kaché, dévoilés dans l'ordre feuille → écorce → coupe → fruit.", + "properties": { + "feuille": { "type": "string" }, + "ecorce": { "type": "string" }, + "port": { "type": "string" }, + "coupe": { "type": "string" }, + "fruit": { "type": "string" }, + "fleur": { "type": "string" }, + "latex": { "type": "string" }, + "graine": { "type": "string" }, + "usage_haie": { "type": "string" } + } + }, + + "medias": { + "type": "array", + "items": { "$ref": "#/$defs/media" } + }, + + "audio": { + "type": "object", + "additionalProperties": false, + "required": ["gcf", "locuteur"], + "properties": { + "gcf": { + "type": ["string", "null"], + "pattern": "^/audio/[a-z0-9-]+\\.opus$", + "description": "Prononciation kréyòl par une voix humaine. Aucune synthèse vocale (brief §6). Null tant que l'enregistrement manque ; le jeu doit se replier en silence." + }, + "locuteur": { "type": ["string", "null"] } + } + }, + + "sources_factuelles": { + "type": "array", + "description": "Références consultées pour les indices, la saisonnalité et le danger. TRAMIL se cite ici — jamais comme source de fichiers (ADR 0001).", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["titre", "url", "consulte_le"], + "properties": { + "titre": { "type": "string" }, + "url": { "type": "string", "format": "uri" }, + "consulte_le": { "type": "string", "format": "date" } + } + } + }, + + "valide": { + "type": "boolean", + "description": "L'entrée entière est-elle validée pour publication ? False par défaut. Ne passe à true que par décision humaine." + } + }, + + "allOf": [ + { + "if": { "properties": { "categorie": { "const": "fruit" } }, "required": ["categorie"] }, + "then": { "required": ["saison_mois"] } + }, + { + "if": { "properties": { "categorie": { "const": "plante_dangereuse" } }, "required": ["categorie"] }, + "then": { + "properties": { "danger": { "type": "object" } }, + "description": "Une plante dangereuse a obligatoirement un bloc danger renseigné." + } + }, + { + "if": { "properties": { "orthographe": { "properties": { "statut": { "const": "relu" } }, "required": ["statut"] } } }, + "then": { "properties": { "orthographe": { "properties": { "relu_par": { "type": "string", "minLength": 2 } } } } } + } + ], + + "$defs": { + "media": { + "type": "object", + "additionalProperties": false, + "required": [ + "id", + "filiere", + "type_media", + "vue", + "usages", + "source", + "auteur", + "licence", + "url_fichier", + "url_description", + "attribution_requise", + "partage_identique", + "usage_non_commercial", + "composite", + "valide", + "valide_par" + ], + "properties": { + "id": { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" }, + + "filiere": { + "enum": ["A", "B"], + "description": "A = vérité (photographie réelle, sert à identifier). B = décor (image générée, ne sert jamais à identifier). ADR 0004." + }, + + "type_media": { + "enum": ["photo", "planche_botanique", "image_generee"], + "description": "Une planche botanique ancienne est exacte mais stylisée : elle documente, elle n'entraîne pas la reconnaissance du réel. Seule une photo peut porter une épreuve." + }, + + "vue": { + "enum": ["fruit_entier", "coupe", "feuille", "ecorce", "port", "fleur", "graine", null], + "description": "Les quatre vues pédagogiques du pack (arbre · fruit entier · coupe · feuille), étendues. Null tant qu'un humain n'a pas regardé l'image." + }, + + "usages": { + "type": "array", + "uniqueItems": true, + "items": { "enum": ["epreuve", "indice", "fiche", "decor"] }, + "description": "Où ce média est employé. 'epreuve' et 'indice' imposent filière A + photo + validé." + }, + + "source": { + "enum": ["wikimedia_commons", "inaturalist", "porteur", "herbier", "comfyui"] + }, + + "auteur": { "type": ["string", "null"] }, + + "licence": { + "enum": [ + "CC0-1.0", + "PD", + "CC-BY-2.0", + "CC-BY-3.0", + "CC-BY-4.0", + "CC-BY-SA-2.0", + "CC-BY-SA-2.5", + "CC-BY-SA-3.0", + "CC-BY-SA-4.0", + "CC-BY-NC-4.0", + "CC-BY-NC-SA-4.0", + "OKI-CC-BY-SA-4.0" + ] + }, + + "licence_url": { "type": ["string", "null"] }, + + "url_fichier": { "type": "string", "format": "uri" }, + "url_description": { "type": "string", "format": "uri" }, + + "largeur": { "type": ["integer", "null"] }, + "hauteur": { "type": ["integer", "null"] }, + "mime": { "type": ["string", "null"] }, + "description": { "type": ["string", "null"] }, + "date_prise_de_vue": { "type": ["string", "null"] }, + + "attribution_requise": { "type": "boolean" }, + "partage_identique": { "type": "boolean" }, + "usage_non_commercial": { + "type": "boolean", + "description": "CC BY-NC. Accepté par l'ADR 0001 au prix d'un engagement non commercial définitif. Doit apparaître dans CREDITS.md." + }, + + "composite": { + "type": "boolean", + "description": "Ce média a-t-il été fusionné avec un autre ? Interdit sur tout média SA ou NC (conflit de licence, ADR 0001)." + }, + + "valide": { "type": "boolean" }, + "valide_par": { "type": ["string", "null"] }, + "valide_le": { "type": ["string", "null"], "format": "date" }, + "note_validation": { "type": ["string", "null"] } + } + } + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..62132f9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,96 @@ +{ + "name": "ki-fwi", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ki-fwi", + "version": "0.0.0", + "license": "AGPL-3.0-or-later", + "devDependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1f2f2a7 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "ki-fwi", + "version": "0.0.0", + "private": true, + "description": "KI FWI SA YÉ ? — jeu éducatif libre : reconnaître les fruits, les arbres et les plantes des Antilles.", + "license": "AGPL-3.0-or-later", + "type": "module", + "engines": { + "node": ">=22" + }, + "scripts": { + "verify:taxa": "node tools/data/verify-taxa.mjs", + "ingest:commons": "node tools/data/ingest-commons.mjs", + "build:dataset": "node tools/data/build-dataset.mjs", + "check:audio": "node tools/data/check-audio.mjs", + "validate:data": "node tools/data/validate.mjs", + "build:credits": "node tools/data/build-credits.mjs", + "test:porte": "node tools/data/test-porte.mjs" + }, + "devDependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1" + } +} diff --git a/src/lib/data/fruits/ake.json b/src/lib/data/fruits/ake.json new file mode 100644 index 0000000..30aeb09 --- /dev/null +++ b/src/lib/data/fruits/ake.json @@ -0,0 +1,127 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "ake", + "categorie": "plante_dangereuse", + "noms": { + "gcf": "aki", + "fr": "akée", + "en": "ackee", + "es": "seso vegetal" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Blighia sapida", + "famille": "Sapindaceae", + "wikidata": "Q417145", + "gbif": 3189955, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf" + ], + "comestible": false, + "danger": { + "niveau": "critique", + "conduite": "Ne jamais forcer un fruit fermé. En cas d'ingestion suspecte : urgences.", + "resume": "Comestible UNIQUEMENT ouvert naturellement et mûr, et seulement la partie charnue claire. Le fruit non mûr et les graines sont toxiques (hypoglycine)." + }, + "indices": { + "fruit": "capsule rouge-orangé qui s'ouvre en trois valves à maturité, graines noires brillantes" + }, + "medias": [ + { + "id": "ackee-001", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Jerome Walker", + "licence": "CC-BY-SA-3.0", + "licence_url": "http://creativecommons.org/licenses/by-sa/3.0/", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/cf/Ackee_001.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Ackee_001.jpg", + "largeur": 2848, + "hauteur": 2136, + "mime": "image/jpeg", + "description": "Photo of closed Ackee ( Blighia sapida ) fruit on tree", + "date_prise_de_vue": "2005-10-21", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "walter-hood-fitch03", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Walter Hood Fitch", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/19/Walter_Hood_Fitch03.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Walter_Hood_Fitch03.JPG", + "largeur": 1194, + "hauteur": 1732, + "mime": "image/jpeg", + "description": "Guava, Mango, Mangosteen, Lychee, Pistachio, Avocado Pear, Durian, from \"A History of the Vegetable Kingdom\" by William Rhind (published in London by Blackie & Son, 1874). Walter Hood Fitch supplied most of the illus", + "date_prise_de_vue": "1874", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "owoce-aka", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Agnieszka Kwiecień ( Nova )", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/15/Owoce_Aka.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Owoce_Aka.jpg", + "largeur": 1860, + "hauteur": 1860, + "mime": "image/jpeg", + "description": "Ackee - the fruit of Blighia sapida .", + "date_prise_de_vue": "2013-05-11", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/fwiyapen.json b/src/lib/data/fruits/fwiyapen.json new file mode 100644 index 0000000..fbe301b --- /dev/null +++ b/src/lib/data/fruits/fwiyapen.json @@ -0,0 +1,135 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "fwiyapen", + "categorie": "fruit", + "noms": { + "gcf": "fwiyapen", + "fr": "fruit à pain", + "en": "breadfruit", + "es": "fruta del pan" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Artocarpus altilis", + "famille": "Moraceae", + "wikidata": "Q14677", + "gbif": 2984573, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf", + "re" + ], + "saison_mois": [ + 7, + 8, + 9, + 10, + 11, + 12 + ], + "comestible": true, + "danger": null, + "indices": { + "feuille": "très grande, profondément lobée — la plus reconnaissable de toutes", + "ecorce": "grise, latex blanc à l'entaille", + "port": "grand arbre 15–25 m, houppier large", + "coupe": "chair blanc-crème dense, se cuisine, ne se mange pas cru" + }, + "medias": [ + { + "id": "artocarpus-incisus-blanco2-267", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5e/Artocarpus_incisus_Blanco2.267.png", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_incisus_Blanco2.267.png", + "largeur": 1379, + "hauteur": 2020, + "mime": "image/png", + "description": "Artocarpus incisa Blanco (inside Artocarpus altilis species)", + "date_prise_de_vue": "1880-1883?", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "starr-031209-0031-artocarpus-altilis", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Forest & Kim Starr", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/78/Starr_031209-0031_Artocarpus_altilis.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_031209-0031_Artocarpus_altilis.jpg", + "largeur": 1632, + "hauteur": 1224, + "mime": "image/jpeg", + "description": "Artocarpus altilis (leaves and fruit). Location: Maui, Puehuihueiki cemetary Lahaina", + "date_prise_de_vue": "2003-12-09", + "attribution_requise": true, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "artocarpus-altilis-fruit", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Hans Hillewaert", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/57/Artocarpus_altilis_%28fruit%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_(fruit).jpg", + "largeur": 2848, + "hauteur": 3799, + "mime": "image/jpeg", + "description": "Breadfruit at Tortuguero, Costa Rica", + "date_prise_de_vue": "2009-08-12", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/gouyav.json b/src/lib/data/fruits/gouyav.json new file mode 100644 index 0000000..3c32463 --- /dev/null +++ b/src/lib/data/fruits/gouyav.json @@ -0,0 +1,134 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "gouyav", + "categorie": "fruit", + "noms": { + "gcf": "gouyav", + "fr": "goyave", + "en": "guava", + "es": "guayaba" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Psidium guajava", + "famille": "Myrtaceae", + "wikidata": "Q166843", + "gbif": 5420380, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf", + "re" + ], + "saison_mois": [ + 8, + 9, + 10, + 11, + 12 + ], + "comestible": true, + "danger": null, + "indices": { + "feuille": "opposée, ovale, nervures secondaires très marquées en creux", + "ecorce": "lisse, se desquamant en plaques, brun-vert clair — indice très reconnaissable", + "port": "arbuste 3–8 m, tronc souvent tortueux", + "coupe": "chair rose ou blanche, nombreuses petites graines dures" + }, + "medias": [ + { + "id": "psidium-guajava-fruit-2", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Own work", + "licence": "CC-BY-SA-3.0", + "licence_url": "http://creativecommons.org/licenses/by-sa/3.0/", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/19/Psidium_guajava_fruit_%282%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Psidium_guajava_fruit_(2).jpg", + "largeur": 744, + "hauteur": 768, + "mime": "image/jpeg", + "description": "Guava fruit bought and photographed in Taiwan. Binomial name is tentative.", + "date_prise_de_vue": "Taken on 20 January 2004", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "apple-guava", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Fuadsyazwan ( talk )", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/34/Apple_Guava.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Apple_Guava.jpg", + "largeur": 1632, + "hauteur": 1224, + "mime": "image/jpeg", + "description": "A shot of apple guava", + "date_prise_de_vue": "6 March 2008 (original upload date) ( Original text: 06 March 2008 )", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "starr-111012-8771-psidium-guajava-burnt-fruit-kahana-maui-24", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Forest and Kim Starr", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/cb/Starr-111012-8771-Psidium_guajava-burnt_fruit-Kahana-Maui_%2824488703784%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-111012-8771-Psidium_guajava-burnt_fruit-Kahana-Maui_(24488703784).jpg", + "largeur": 2592, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Psidium guajava (Guava) Burnt fruit at Kahana, Maui, Hawaii. October 12, 2011 #111012-8771 Image Use Policy", + "date_prise_de_vue": "2011-10-12 10:51", + "attribution_requise": true, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/kenet.json b/src/lib/data/fruits/kenet.json new file mode 100644 index 0000000..1e2df02 --- /dev/null +++ b/src/lib/data/fruits/kenet.json @@ -0,0 +1,134 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "kenet", + "categorie": "fruit", + "noms": { + "gcf": "kénèt", + "fr": "quenette", + "en": "Spanish lime", + "es": "mamoncillo" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Melicoccus bijugatus", + "famille": "Sapindaceae", + "wikidata": "Q279728", + "gbif": 3189990, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq" + ], + "saison_mois": [ + 6, + 7, + 8, + 9 + ], + "comestible": true, + "danger": { + "niveau": "vigilance", + "resume": "noyau volumineux — risque d'étouffement chez le jeune enfant. À mentionner sobrement." + }, + "indices": { + "feuille": "composée paripennée, 2 paires de folioles", + "ecorce": "lisse, grise", + "port": "grand arbre pouvant dépasser 20 m", + "coupe": "pulpe orangée gélatineuse autour d'un gros noyau" + }, + "medias": [ + { + "id": "melicoccus-bijugatus", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "No machine-readable author provided. Hans B.~commonswiki assumed (based on copyright claims).", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/6e/Melicoccus_bijugatus.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Melicoccus_bijugatus.jpg", + "largeur": 2126, + "hauteur": 1757, + "mime": "image/jpeg", + "description": "Melicoccus bijugatus bought at the Visserijplein market in Rotterdam, The Netherlands", + "date_prise_de_vue": "18 May 2006 (original upload date)", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "cebus-capucinus-puntarenas-costa-rica", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "kansasphoto", + "licence": "CC-BY-2.0", + "licence_url": "https://creativecommons.org/licenses/by/2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Cebus_capucinus_Puntarenas_Costa_Rica.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Cebus_capucinus_Puntarenas_Costa_Rica.jpg", + "largeur": 3924, + "hauteur": 2616, + "mime": "image/jpeg", + "description": "Cebus capucinus , picture taked in Puntarenas, Costa Rica.", + "date_prise_de_vue": "2009-04-09", + "attribution_requise": true, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "una-rama-de-mamon", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "EEIM", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/4f/Una_rama_de_mamon.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Una_rama_de_mamon.jpeg", + "largeur": 3264, + "hauteur": 2448, + "mime": "image/jpeg", + "description": "ramas", + "date_prise_de_vue": "8 December 2015 (according to Exif data)", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/kowosol.json b/src/lib/data/fruits/kowosol.json new file mode 100644 index 0000000..3075215 --- /dev/null +++ b/src/lib/data/fruits/kowosol.json @@ -0,0 +1,133 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "kowosol", + "categorie": "fruit", + "noms": { + "gcf": "kowosòl", + "fr": "corossol", + "en": "soursop", + "es": "guanábana" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Annona muricata", + "famille": "Annonaceae", + "wikidata": "Q1709343", + "gbif": 5407273, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf" + ], + "saison_mois": [ + 7, + 8, + 9, + 10, + 11 + ], + "comestible": true, + "danger": null, + "indices": { + "feuille": "simple, alterne, oblongue, vert foncé luisant dessus, odeur forte au froissement", + "ecorce": "grisâtre, fissurée avec l'âge", + "port": "petit arbre 4–8 m, houppier peu dense", + "coupe": "chair blanche fibreuse, nombreuses graines noires luisantes" + }, + "medias": [ + { + "id": "soursop-fruit", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "USGov", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/a/a8/Soursop_fruit.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Soursop_fruit.jpg", + "largeur": 365, + "hauteur": 274, + "mime": "image/jpeg", + "description": "Picture of soursop fruit, Annona muricata", + "date_prise_de_vue": "uploaded on 9 November 2005", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "annona-muricata-1", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Damien Boilley from suburbs of Paris, France", + "licence": "CC-BY-2.0", + "licence_url": "https://creativecommons.org/licenses/by/2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/6d/Annona_muricata_1.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_muricata_1.jpg", + "largeur": 960, + "hauteur": 1280, + "mime": "image/jpeg", + "description": "Soursop fruit ( Annona muricata ). Photograph taken at the Jardin d'Éden botanical park, Saint-Gilles les Bains ( commune of Saint-Paul ), Réunion Island (Indian Ocean, a part of the French Republic).", + "date_prise_de_vue": "2006-01-05", + "attribution_requise": true, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "annona-muricata2", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "User:Hans_B.", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/bd/Annona_muricata2.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_muricata2.jpg", + "largeur": 2592, + "hauteur": 1944, + "mime": "image/jpeg", + "description": "Annona muricata , bought at the Binnenrotte market in Rotterdam, The Netherlands", + "date_prise_de_vue": "2006-05-30", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/lorye-jonn.json b/src/lib/data/fruits/lorye-jonn.json new file mode 100644 index 0000000..29c45bb --- /dev/null +++ b/src/lib/data/fruits/lorye-jonn.json @@ -0,0 +1,129 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "lorye-jonn", + "categorie": "plante_dangereuse", + "noms": { + "gcf": "lorié-jòn", + "fr": "laurier jaune", + "en": "yellow oleander", + "es": "cabalonga" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Cascabela thevetia", + "famille": "Apocynaceae", + "wikidata": "Q10694475", + "gbif": 3169652, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf", + "re" + ], + "comestible": false, + "danger": { + "niveau": "critique", + "resume": "Toute la plante est toxique, les graines particulièrement (cardiotoxiques). Plante ornementale très courante — d'où le risque." + }, + "indices": { + "fleur": "trompette jaune vif", + "fruit": "drupe verte anguleuse devenant noire, une graine dure à l'intérieur", + "latex": "latex blanc à la cassure" + }, + "medias": [ + { + "id": "thevetia-peruviana1", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "No machine-readable author provided. Hans B.~commonswiki assumed (based on copyright claims).", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/f0/Thevetia_peruviana1.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Thevetia_peruviana1.jpg", + "largeur": 2592, + "hauteur": 1944, + "mime": "image/jpeg", + "description": "Thevetia peruviana , picture taken at the Passiflorahoeve in Harskamp, The Netherlands", + "date_prise_de_vue": "14 July 2006 (according to Exif data)", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "yellow-oleander-thevetia-peruviana-leaves-flowers-in-kolkata", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "J.M.Garg", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/8/87/Yellow_Oleander_%28Thevetia_peruviana%29_leaves_%26_flowers_in_Kolkata_W_IMG_8008.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Yellow_Oleander_(Thevetia_peruviana)_leaves_%26_flowers_in_Kolkata_W_IMG_8008.jpg", + "largeur": 619, + "hauteur": 600, + "mime": "image/jpeg", + "description": "Yellow Oleander Thevetia peruviana in Kolkata , West Bengal , India .", + "date_prise_de_vue": "02.06.07", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "starr-060916-8881-thevetia-peruviana", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Forest & Kim Starr", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/dc/Starr_060916-8881_Thevetia_peruviana.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_060916-8881_Thevetia_peruviana.jpg", + "largeur": 2592, + "hauteur": 1944, + "mime": "image/jpeg", + "description": "Thevetia peruviana (habit). Location: Maui, Kula", + "date_prise_de_vue": "2006-09-16", + "attribution_requise": true, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/mansiniye.json b/src/lib/data/fruits/mansiniye.json new file mode 100644 index 0000000..83b2622 --- /dev/null +++ b/src/lib/data/fruits/mansiniye.json @@ -0,0 +1,129 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "mansiniye", + "categorie": "plante_dangereuse", + "noms": { + "gcf": "mansiniyé", + "fr": "mancenillier", + "en": "manchineel", + "es": "manzanillo" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Hippomane mancinella", + "famille": "Euphorbiaceae", + "wikidata": "Q636480", + "gbif": 3063705, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq" + ], + "comestible": false, + "danger": { + "niveau": "critique", + "signalement": "Arbres marqués d'une bande de peinture rouge sur le littoral en Martinique et en Guadeloupe.", + "conduite": "En cas de contact : rincer abondamment à l'eau, consulter.", + "resume": "Ne jamais toucher, ne jamais manger le fruit, ne jamais s'abriter dessous sous la pluie, ne jamais brûler le bois." + }, + "indices": { + "feuille": "petite, ovale, luisante, nervure médiane jaune, souvent une glande à la base du limbe", + "port": "arbre du bord de mer, houppier étalé", + "fruit": "petite pomme verte à jaunâtre, d'aspect appétissant — c'est là tout le danger" + }, + "medias": [ + { + "id": "hippomane-mancinella-hocquart-1821", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "M. Hocquart", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/17/Hippomane_mancinella-Hocquart_1821.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Hocquart_1821.jpeg", + "largeur": 363, + "hauteur": 500, + "mime": "image/jpeg", + "description": "Hippomane mancinella illustration", + "date_prise_de_vue": "1821", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "hyacinthus-orientalis-and-hippomane-mancinella", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "\"The Universal Herbal\" by Thomas Green (published 1816–20)", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/09/Hyacinthus_orientalis_and_Hippomane_mancinella.gif", + "url_description": "https://commons.wikimedia.org/wiki/File:Hyacinthus_orientalis_and_Hippomane_mancinella.gif", + "largeur": 317, + "hauteur": 252, + "mime": "image/gif", + "description": "Hyacinthus orientalis and Hippomane mancinella", + "date_prise_de_vue": "1816–20", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "hippomane-mancinella-jacquin", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Nicolás Joseph Jacquin", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/6d/Hippomane_mancinella-Jacquin.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Jacquin.jpeg", + "largeur": 500, + "hauteur": 753, + "mime": "image/jpeg", + "description": "Hippomane mancinella", + "date_prise_de_vue": "1780", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/medisinye.json b/src/lib/data/fruits/medisinye.json new file mode 100644 index 0000000..d85af31 --- /dev/null +++ b/src/lib/data/fruits/medisinye.json @@ -0,0 +1,127 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "medisinye", + "categorie": "plante_dangereuse", + "noms": { + "gcf": "medsinyé", + "fr": "médicinier", + "en": "physic nut", + "es": "piñón" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Jatropha curcas", + "famille": "Euphorbiaceae", + "wikidata": "Q74644", + "gbif": 3072953, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf" + ], + "comestible": false, + "danger": { + "niveau": "eleve", + "resume": "Graines toxiques — cause fréquente d'intoxication chez l'enfant aux Antilles. Quelques graines suffisent." + }, + "indices": { + "fruit": "capsule verte devenant jaune puis noire, 2 à 3 graines brun foncé", + "usage_haie": "souvent planté en haie vive, donc à portée d'enfant" + }, + "medias": [ + { + "id": "jatropha-curcas-blanco2-384", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5d/Jatropha_curcas_Blanco2.384.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384.jpg", + "largeur": 1411, + "hauteur": 2061, + "mime": "image/jpeg", + "description": "Jatropha curcas Plate from book", + "date_prise_de_vue": "between 1880 and 1883 date QS:P,+1880-00-00T00:00:00Z/8,P1319,+1880-00-00T00:00:00Z/9,P1326,+1883-00-00T00:00:00Z/9", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "jatropha-curcas-blanco2-384-cropped", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/35/Jatropha_curcas_Blanco2.384-cropped.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384-cropped.jpg", + "largeur": 1300, + "hauteur": 1870, + "mime": "image/jpeg", + "description": "Jatropha curcas Plate from book", + "date_prise_de_vue": "between 1880 and 1883 date QS:P,+1880-00-00T00:00:00Z/8,P1319,+1880-00-00T00:00:00Z/9,P1326,+1883-00-00T00:00:00Z/9", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "georg-forster-purgiernuss", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Georg Forster", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/73/Georg_Forster_-_Purgiernuss.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Georg_Forster_-_Purgiernuss.jpeg", + "largeur": 1836, + "hauteur": 2658, + "mime": "image/jpeg", + "description": null, + "date_prise_de_vue": null, + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/pom-dlo.json b/src/lib/data/fruits/pom-dlo.json new file mode 100644 index 0000000..81364c6 --- /dev/null +++ b/src/lib/data/fruits/pom-dlo.json @@ -0,0 +1,134 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "pom-dlo", + "categorie": "fruit", + "noms": { + "gcf": "pòm-dlo", + "fr": "pomme d'eau", + "en": "water apple", + "es": "manzana de agua" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Syzygium samarangense", + "famille": "Myrtaceae", + "wikidata": "Q11643111", + "gbif": 3183180, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf", + "re" + ], + "saison_mois": [ + 4, + 5, + 6, + 7 + ], + "comestible": true, + "danger": null, + "indices": { + "feuille": "opposée, grande, coriace, sessile ou presque", + "ecorce": "brun clair, s'écaillant", + "port": "arbre 5–15 m", + "coupe": "chair blanche très aqueuse, cavité centrale creuse" + }, + "medias": [ + { + "id": "champanga-flower-buds", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Vinayaraj", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/2c/Champanga_flower_buds.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Champanga_flower_buds.jpg", + "largeur": 2073, + "hauteur": 1590, + "mime": "image/jpeg", + "description": "Champanga flower buds", + "date_prise_de_vue": "2005-04-19", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "lainwu-wax-apple-diamond-p00063", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Taiwan7007", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/39/Lainwu_%28Wax_apple%29_diamond_P00063.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Lainwu_(Wax_apple)_diamond_P00063.JPG", + "largeur": 308, + "hauteur": 330, + "mime": "image/jpeg", + "description": "Black pearl wax apples. Photo by Yu Jen, Su.", + "date_prise_de_vue": "2005-07-08", + "attribution_requise": true, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "9956kfsyzygium-samarangense-pampangafvf-05", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Judgefloro", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/ed/9956kfSyzygium_samarangense_Pampangafvf_05.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:9956kfSyzygium_samarangense_Pampangafvf_05.JPG", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Syzygium samarangense in Barangay Santo Niño , San Fernando, Pampanga - San Fernando Subdivision Santo Niño .", + "date_prise_de_vue": "2015-04-22 14:33:45", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false, + "$comment": "ATTENTION : « pòm-dlo », « pòm-malaka » et « pòm-rose » désignent des Syzygium DIFFÉRENTS selon les îles (S. samarangense, S. malaccense, S. jambos). Point de confusion classique — à trancher explicitement avant publication." +} diff --git a/src/lib/data/fruits/pom-kajou.json b/src/lib/data/fruits/pom-kajou.json new file mode 100644 index 0000000..2191442 --- /dev/null +++ b/src/lib/data/fruits/pom-kajou.json @@ -0,0 +1,126 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "pom-kajou", + "categorie": "plante_dangereuse", + "noms": { + "gcf": "pòm-kajou", + "fr": "pomme-cajou", + "en": "cashew apple", + "es": "marañón" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Anacardium occidentale", + "famille": "Anacardiaceae", + "wikidata": "Q34007", + "gbif": 5421368, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf" + ], + "comestible": false, + "danger": { + "niveau": "eleve", + "resume": "La pomme se mange. La coque de la noix contient un liquide caustique qui brûle la peau et les muqueuses. Ne jamais ouvrir ni mordre la noix crue." + }, + "indices": { + "fruit": "pomme charnue jaune ou rouge surmontée d'une noix recourbée grise" + }, + "medias": [ + { + "id": "anacardium-occidentale-kohler-s-medizinal-pflanzen-010", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Franz Eugen Köhler, Köhler's Medizinal-Pflanzen", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/0e/Anacardium_occidentale_-_K%C3%B6hler%E2%80%93s_Medizinal-Pflanzen-010.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_-_K%C3%B6hler%E2%80%93s_Medizinal-Pflanzen-010.jpg", + "largeur": 425, + "hauteur": 589, + "mime": "image/jpeg", + "description": "Kaschu. A Blühende Pflanze. 1 Blüte vergrössert ; 2 Stempel und Staubgefässe; 3 Dasselbe im Längsschnitt; 4 Frucht mit dem vergrösserten und reifen Fruchtstiel; 5 Frucht im Längsschnitt; 6 Frucht im Querschnitt.", + "date_prise_de_vue": "1897", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "cashew2-flower", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Aruna at Malayalam Wikipedia", + "licence": "CC-BY-SA-3.0", + "licence_url": "http://creativecommons.org/licenses/by-sa/3.0/", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/bf/Cashew2-flower.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Cashew2-flower.JPG", + "largeur": 1024, + "hauteur": 768, + "mime": "image/jpeg", + "description": "Cashew flower", + "date_prise_de_vue": "2007-12-07", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "cashew-apples", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Abhishek Jacob", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/64/Cashew_apples.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Cashew_apples.jpg", + "largeur": 2534, + "hauteur": 1982, + "mime": "image/jpeg", + "description": "Ripe cashew apples", + "date_prise_de_vue": "2009-04-14", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/pom-kannel.json b/src/lib/data/fruits/pom-kannel.json new file mode 100644 index 0000000..f4c7bcc --- /dev/null +++ b/src/lib/data/fruits/pom-kannel.json @@ -0,0 +1,134 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "pom-kannel", + "categorie": "fruit", + "noms": { + "gcf": "pòm-kannèl", + "fr": "pomme-cannelle", + "en": "sugar apple", + "es": "anón" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Annona squamosa", + "famille": "Annonaceae", + "wikidata": "Q275620", + "gbif": 5407099, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq" + ], + "saison_mois": [ + 8, + 9, + 10, + 11 + ], + "comestible": true, + "danger": { + "niveau": "vigilance", + "resume": "graines des Annona non comestibles — ne jamais croquer." + }, + "indices": { + "feuille": "alterne, oblongue, plus fine et plus claire que le corossol", + "ecorce": "grise, rameaux zigzagants", + "port": "petit arbre 3–6 m", + "coupe": "chair blanche en segments détachables, graines noires" + }, + "medias": [ + { + "id": "annona-squamosa-custurd-apple-plant-in-hyderabad-ap-w-img-93", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "J.M.Garg", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5a/Annona_squamosa_%28Custurd_Apple%29_plant_in_Hyderabad%2C_AP_W_IMG_9354.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_squamosa_(Custurd_Apple)_plant_in_Hyderabad,_AP_W_IMG_9354.jpg", + "largeur": 800, + "hauteur": 533, + "mime": "image/jpeg", + "description": "Custard-apple, sugar-apple, sweetsop, sitaphal or Sita's fruit, shareefah, aataa or Rahmapfel Annona squamosa in Hyderabad , India .", + "date_prise_de_vue": "2008-09-13", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "annona-squamosa-fruits-leaves", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Jim Conrad", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/8/8d/Annona_squamosa-fruits-leaves.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_squamosa-fruits-leaves.jpg", + "largeur": 650, + "hauteur": 419, + "mime": "image/jpeg", + "description": "The syncarpous fruits of an Annona squamosa tree growing near Sabacché, Yucatán, MÉXICO.", + "date_prise_de_vue": "2008-08-18", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "sharifa", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Miansari66", + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/47/Sharifa.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Sharifa.JPG", + "largeur": 2816, + "hauteur": 2112, + "mime": "image/jpeg", + "description": "Sharifa in urdu, Custard apple in english", + "date_prise_de_vue": null, + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/pom-site.json b/src/lib/data/fruits/pom-site.json new file mode 100644 index 0000000..7199180 --- /dev/null +++ b/src/lib/data/fruits/pom-site.json @@ -0,0 +1,133 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "pom-site", + "categorie": "fruit", + "noms": { + "gcf": "pòm-sitè", + "fr": "prune de Cythère", + "en": "ambarella", + "es": "jobo indio" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Spondias dulcis", + "famille": "Anacardiaceae", + "wikidata": "Q500383", + "gbif": 3190595, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf" + ], + "saison_mois": [ + 11, + 12, + 1, + 2, + 3 + ], + "comestible": true, + "danger": null, + "indices": { + "feuille": "composée imparipennée, folioles nombreuses, caduque en saison sèche", + "ecorce": "grise, lenticelles visibles", + "port": "arbre 8–15 m, branches cassantes", + "coupe": "chair jaune croquante, noyau fibreux épineux caractéristique" + }, + "medias": [ + { + "id": "spondia-dulcis-blanco1-132", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/3a/Spondia_dulcis_Blanco1.132.png", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.png", + "largeur": 1417, + "hauteur": 2107, + "mime": "image/png", + "description": "Plate from book", + "date_prise_de_vue": "1880-1883?", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "spondia-dulcis-blanco1-132-cropped", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/38/Spondia_dulcis_Blanco1.132-cropped.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132-cropped.jpg", + "largeur": 1270, + "hauteur": 1770, + "mime": "image/jpeg", + "description": "Plate from book", + "date_prise_de_vue": "1880-1883?", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "spondia-dulcis-blanco1-132-2", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/22/Spondia_dulcis_Blanco1.132.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.jpg", + "largeur": 1417, + "hauteur": 2107, + "mime": "image/jpeg", + "description": "Plate from book", + "date_prise_de_vue": "1880-1883?", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/src/lib/data/fruits/zikak.json b/src/lib/data/fruits/zikak.json new file mode 100644 index 0000000..5473054 --- /dev/null +++ b/src/lib/data/fruits/zikak.json @@ -0,0 +1,132 @@ +{ + "$schema": "../../../../fruits.schema.json", + "id": "zikak", + "categorie": "fruit", + "noms": { + "gcf": "zikak", + "fr": "icaque", + "en": "cocoplum", + "es": "icaco" + }, + "orthographe": { + "norme": "gwadloupeyen", + "statut": "a_relire", + "relu_par": null + }, + "taxon": { + "scientifique": "Chrysobalanus icaco", + "famille": "Chrysobalanaceae", + "wikidata": "Q577669", + "gbif": 2985082, + "verifie_le": "2026-07-27", + "verifie_contre": [ + "wikidata", + "gbif" + ] + }, + "iles": [ + "gp", + "mq", + "gf" + ], + "saison_mois": [ + 8, + 9, + 10, + 11 + ], + "comestible": true, + "danger": null, + "indices": { + "feuille": "petite, arrondie, coriace, vert brillant — plante de bord de mer", + "ecorce": "brun-gris, arbuste buissonnant", + "port": "arbuste 1–3 m, littoral et arrière-plage", + "coupe": "chair blanche cotonneuse peu juteuse, gros noyau côtelé" + }, + "medias": [ + { + "id": "starr-031108-2161-chrysobalanus-icaco", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Forest & Kim Starr", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/de/Starr_031108-2161_Chrysobalanus_icaco.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_031108-2161_Chrysobalanus_icaco.jpg", + "largeur": 1632, + "hauteur": 1224, + "mime": "image/jpeg", + "description": "Chrysobalanus icaco (flowers). Location: Florida, Long Key", + "date_prise_de_vue": "2003-11-08", + "attribution_requise": true, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "chrysobalanus-icaco-inflorescense", + "filiere": "A", + "type_media": "photo", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Hans Hillewaert", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/3e/Chrysobalanus_icaco_%28inflorescense%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_(inflorescense).jpg", + "largeur": 2473, + "hauteur": 3297, + "mime": "image/jpeg", + "description": "Cocoplum near Cahuita, Costa Rica", + "date_prise_de_vue": "2009-08-16", + "attribution_requise": true, + "partage_identique": true, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + }, + { + "id": "flore-medicale-des-antilles-ou-traite-des-plantes-usuelles-p", + "filiere": "A", + "type_media": "planche_botanique", + "vue": null, + "usages": [], + "source": "wikimedia_commons", + "auteur": "Descourtilz, J. Theodore.; Descourtilz, M. E.; Pichard.", + "licence": "PD", + "licence_url": null, + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/e3/Flore_m%C3%A9dicale_des_Antilles%2C_ou%2C_Trait%C3%A9_des_plantes_usuelles_%28Pl._84%29_%288201963925%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Flore_m%C3%A9dicale_des_Antilles,_ou,_Trait%C3%A9_des_plantes_usuelles_(Pl._84)_(8201963925).jpg", + "largeur": 1567, + "hauteur": 2592, + "mime": "image/jpeg", + "description": "li. 84- T 4 mt6k i /Wvw^mV^^ /W lA-Mrr*' ^ îCAOriKH I.'AMKR101^K.", + "date_prise_de_vue": "1822", + "attribution_requise": false, + "partage_identique": false, + "usage_non_commercial": false, + "composite": false, + "valide": false, + "valide_par": null, + "valide_le": null, + "note_validation": null + } + ], + "audio": { + "gcf": null, + "locuteur": null + }, + "sources_factuelles": [], + "valide": false +} diff --git a/tools/data/build-credits.mjs b/tools/data/build-credits.mjs new file mode 100644 index 0000000..e3bd1a9 --- /dev/null +++ b/tools/data/build-credits.mjs @@ -0,0 +1,131 @@ +#!/usr/bin/env node +/** + * build-credits.mjs — génère CREDITS.md depuis les données. + * + * Le brief §3 exige un CREDITS.md « généré depuis les données ». Un fichier de crédits + * tenu à la main se désynchronise le jour où l'on remplace une photo, et une attribution + * fausse est une violation de licence. Ce fichier n'est donc jamais édité : il se rejoue. + * + * Les médias sous clause non commerciale sont isolés dans leur propre section, comme + * l'ADR 0001 l'impose. + */ + +import { readFile, readdir, writeFile } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); +const DATA = join(ROOT, 'src', 'lib', 'data', 'fruits'); + +const LIBELLE = { + 'CC0-1.0': 'CC0 1.0 (domaine public volontaire)', + PD: 'domaine public', + 'CC-BY-2.0': 'CC BY 2.0', + 'CC-BY-3.0': 'CC BY 3.0', + 'CC-BY-4.0': 'CC BY 4.0', + 'CC-BY-SA-2.0': 'CC BY-SA 2.0', + 'CC-BY-SA-2.5': 'CC BY-SA 2.5', + 'CC-BY-SA-3.0': 'CC BY-SA 3.0', + 'CC-BY-SA-4.0': 'CC BY-SA 4.0', + 'CC-BY-NC-4.0': 'CC BY-NC 4.0', + 'CC-BY-NC-SA-4.0': 'CC BY-NC-SA 4.0', + 'OKI-CC-BY-SA-4.0': 'ORGANISATION KA INTERNATIONALE, CC BY-SA 4.0' +}; + +const echapper = (s) => String(s ?? '—').replace(/\|/g, '\\|').replace(/\n/g, ' '); + +async function main() { + const fichiers = (await readdir(DATA)).filter((f) => f.endsWith('.json')).sort(); + const entrees = []; + for (const f of fichiers) entrees.push(JSON.parse(await readFile(join(DATA, f), 'utf8'))); + + const tous = entrees.flatMap((e) => e.medias.map((m) => ({ ...m, entree: e }))); + const nc = tous.filter((m) => m.usage_non_commercial); + const sa = tous.filter((m) => m.partage_identique); + + const l = [ + '# Crédits — KI FWI SA YÉ ?', + '', + '> **Fichier généré.** Ne pas éditer à la main : `npm run build:credits`.', + `> Dernière génération : ${new Date().toISOString().slice(0, 10)}.`, + '', + '## Ce que couvre ce fichier', + '', + 'Chaque média embarqué dans le jeu ou dans l’encyclopédie est listé ci-dessous avec son', + 'auteur, sa licence et le lien vers sa page de description d’origine. Rien n’est', + '« libre de droit » : chaque ligne est une obligation contractuelle.', + '', + 'Le code du projet est sous **AGPL-3.0-or-later** (`LICENSE`). Les textes rédigés par', + 'ORGANISATION KA INTERNATIONALE sont sous **CC BY-SA 4.0** (`LICENSE-CONTENT`). Les médias', + 'tiers restent sous leur licence propre : le jeu est une **œuvre collective**, pas une', + 'œuvre dérivée — voir `docs/adr/0001-licences.md`.', + '', + `## Chiffres`, + '', + `- ${entrees.length} entrées · ${tous.length} médias`, + `- ${tous.filter((m) => m.valide).length} médias validés par un humain`, + `- ${sa.length} médias en partage à l’identique (CC BY-SA) — **aucun compositing autorisé**`, + `- ${nc.length} médias sous clause non commerciale (CC BY-NC)`, + '' + ]; + + if (nc.length) { + l.push( + '## ⚠ Médias sous clause non commerciale', + '', + 'La présence de ces médias engage le projet à ne **jamais** être distribué à titre', + 'commercial — ni vente, ni version payante, ni licence à un éditeur. Décision prise et', + 'documentée dans `docs/adr/0001-licences.md`. Retirer ces médias est la seule façon de', + 'revenir en arrière.', + '', + '| entrée | média | auteur | licence | source |', + '|---|---|---|---|---|' + ); + for (const m of nc) + l.push( + `| \`${m.entree.id}\` | ${echapper(m.id)} | ${echapper(m.auteur)} | ${LIBELLE[m.licence] ?? m.licence} | [page](${m.url_description}) |` + ); + l.push(''); + } + + l.push('## Médias par entrée', ''); + for (const e of entrees) { + l.push(`### ${e.noms.gcf} — *${e.taxon.scientifique}* (\`${e.id}\`)`, ''); + l.push( + `Taxonomie vérifiée le ${e.taxon.verifie_le} contre [Wikidata ${e.taxon.wikidata}](https://www.wikidata.org/wiki/${e.taxon.wikidata})`, + `et [GBIF ${e.taxon.gbif}](https://www.gbif.org/species/${e.taxon.gbif}).`, + '' + ); + if (!e.medias.length) { + l.push('_Aucun média._', ''); + continue; + } + l.push('| média | vue | auteur | licence | validé | page d’origine |'); + l.push('|---|---|---|---|---|---|'); + for (const m of e.medias) + l.push( + `| ${echapper(m.id)} | ${m.vue ?? '—'} | ${echapper(m.auteur)} | ${LIBELLE[m.licence] ?? m.licence} | ${m.valide ? `oui (${echapper(m.valide_par)})` : 'non'} | [voir](${m.url_description}) |` + ); + l.push(''); + } + + l.push( + '## Sources factuelles', + '', + '- **Wikidata** — identifiants et taxonomie (CC0). https://www.wikidata.org', + '- **GBIF** — noms scientifiques acceptés et clés d’usage. https://www.gbif.org', + '- **Wikimedia Commons** — photographies. https://commons.wikimedia.org', + '', + 'Voir `SOURCES.md` pour le détail des régimes de licence et `docs/audit-sources.md`', + 'pour l’audit complet, TRAMIL et CIRAD compris.', + '' + ); + + await writeFile(join(ROOT, 'CREDITS.md'), l.join('\n')); + console.log(`✔ CREDITS.md — ${entrees.length} entrées, ${tous.length} médias, ${nc.length} sous clause NC.`); +} + +main().catch((e) => { + console.error('✘', e.stack ?? e.message); + process.exit(1); +}); diff --git a/tools/data/build-dataset.mjs b/tools/data/build-dataset.mjs new file mode 100644 index 0000000..fc6d9e2 --- /dev/null +++ b/tools/data/build-dataset.mjs @@ -0,0 +1,200 @@ +#!/usr/bin/env node +/** + * build-dataset.mjs — compose le dataset à partir de la graine et des sorties vérifiées. + * + * fruits.seed.json (contenu éditorial d'amorçage) + * + tools/data/out/taxa-verified.json (Wikidata + GBIF, réponses d'API) + * + tools/data/out/commons-candidats.json (médias sous licence libre) + * → src/lib/data/fruits/.json + * + * AMORÇAGE SEUL. Une fois les fichiers écrits, ils sont édités à la main par le porteur + * (choix des photos, assignation des vues, passage de `valide` à true, corrections kréyòl). + * Le script refuse donc d'écraser un fichier existant sans `--force`, pour ne jamais + * détruire une validation humaine. + */ + +import { readFile, writeFile, mkdir, access } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); +const DEST = join(ROOT, 'src', 'lib', 'data', 'fruits'); +const FORCE = process.argv.includes('--force'); + +/** Nombre de médias candidats pré-inscrits par entrée. Le brief §8 en exige au moins deux. */ +const MEDIAS_PAR_ENTREE = 3; + +/** Licences à attribution — recopié de la classification d'ingest-commons.mjs. */ +const SANS_ATTRIBUTION = new Set(['CC0-1.0', 'PD']); +const AVEC_SA = new Set(['CC-BY-SA-2.0', 'CC-BY-SA-2.5', 'CC-BY-SA-3.0', 'CC-BY-SA-4.0', 'CC-BY-NC-SA-4.0']); +const AVEC_NC = new Set(['CC-BY-NC-4.0', 'CC-BY-NC-SA-4.0']); + +const slug = (s) => + s + .replace(/^File:/, '') + .replace(/\.[a-z0-9]+$/i, '') + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase() + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-+|-+$/g, '') + .slice(0, 60) + .replace(/-+$/, ''); + +/** + * Une planche gravée du XVIIIe siècle est exacte mais stylisée : elle ne peut pas servir + * d'épreuve de reconnaissance du réel. On la détecte grossièrement — c'est un pré-tri, + * pas un verdict : le porteur corrige le champ à la relecture. + */ +const INDICES_PLANCHE = /blanco|merian|k[oö]hler|flora|sylva|botanical|plate|lithograph|engrav|descourtilz|1[6-9]\d\d/i; + +function typeMedia(c) { + // La date de prise de vue fait partie du texte examiné : sans elle, la planche de + // Jacquin (1780) ressortait en « photo » — son titre et son auteur ne disent rien + // de son siècle. Constaté en session 0, corrigé ici. + const hay = `${c.titre} ${c.description ?? ''} ${c.auteur ?? ''} ${c.date_prise_de_vue ?? ''}`; + if (INDICES_PLANCHE.test(hay)) return 'planche_botanique'; + + // La photographie de terrain n'existe pas avant le XXe siècle dans ces fonds. + const annee = Number((c.date_prise_de_vue ?? '').match(/\b(1[5-9]\d\d)\b/)?.[1]); + if (annee && annee < 1900) return 'planche_botanique'; + + return 'photo'; +} + +/** + * Écart constaté dans la graine : les dangers de niveau « 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 — on normalise vers `resume` sans rien réécrire. + * Écart signalé dans docs/sessions/00-cadre-et-donnees.md, conformément au brief §9. + */ +function normaliserDanger(d) { + if (!d) return null; + const { note, resume, ...reste } = d; + return { ...reste, resume: resume ?? note }; +} + +/** Deux planches Blanco tronquées au même slug : on désambiguïse plutôt que de perdre un média. */ +function idsUniques(medias) { + const vus = new Map(); + return medias.map((m) => { + const n = (vus.get(m.id) ?? 0) + 1; + vus.set(m.id, n); + return n === 1 ? m : { ...m, id: `${m.id}-${n}` }; + }); +} + +async function existe(p) { + try { + await access(p); + return true; + } catch { + return false; + } +} + +async function main() { + const seed = JSON.parse(await readFile(join(ROOT, 'fruits.seed.json'), 'utf8')); + const taxa = JSON.parse(await readFile(join(ROOT, 'tools/data/out/taxa-verified.json'), 'utf8')); + const medias = JSON.parse(await readFile(join(ROOT, 'tools/data/out/commons-candidats.json'), 'utf8')); + + const parId = (arr) => new Map(arr.map((r) => [r.id, r])); + const T = parId(taxa.resultats); + const M = parId(medias.resultats); + const dateVerif = taxa.genere_le.slice(0, 10); + + const entrees = [ + ...seed.fruits.map((f) => ({ ...f, categorie: 'fruit' })), + ...seed.plantes_dangereuses.map((p) => ({ ...p, categorie: 'plante_dangereuse' })) + ]; + + await mkdir(DEST, { recursive: true }); + let ecrits = 0; + let ignores = 0; + + for (const e of entrees) { + const chemin = join(DEST, `${e.id}.json`); + if (!FORCE && (await existe(chemin))) { + console.log(`· ${e.id} — existe déjà, conservé (--force pour écraser)`); + ignores++; + continue; + } + + const t = T.get(e.id); + if (!t?.wikidata?.qid || !t?.gbif?.usageKey) { + console.error(`✘ ${e.id} — taxonomie non vérifiée, entrée non écrite`); + continue; + } + + const candidats = idsUniques( + (M.get(e.id)?.candidats ?? []).slice(0, MEDIAS_PAR_ENTREE).map((c) => ({ + id: slug(c.titre), + filiere: 'A', + type_media: typeMedia(c), + vue: null, + usages: [], + source: 'wikimedia_commons', + auteur: c.auteur, + licence: c.licence, + licence_url: c.licence_url ?? null, + url_fichier: c.url_fichier, + url_description: c.url_description, + largeur: c.largeur ?? null, + hauteur: c.hauteur ?? null, + mime: c.mime ?? null, + description: c.description ?? null, + date_prise_de_vue: c.date_prise_de_vue ?? null, + attribution_requise: !SANS_ATTRIBUTION.has(c.licence), + partage_identique: AVEC_SA.has(c.licence), + usage_non_commercial: AVEC_NC.has(c.licence), + composite: false, + valide: false, + valide_par: null, + valide_le: null, + note_validation: null + })) + ); + + const entree = { + $schema: '../../../../fruits.schema.json', + id: e.id, + categorie: e.categorie, + noms: e.noms, + orthographe: { norme: 'gwadloupeyen', statut: 'a_relire', relu_par: null }, + taxon: { + scientifique: t.gbif.canonicalName ?? e.taxon.scientifique, + famille: t.gbif.famille ?? e.taxon.famille, + wikidata: t.wikidata.qid, + gbif: t.gbif.usageKey, + verifie_le: dateVerif, + verifie_contre: ['wikidata', 'gbif'] + }, + iles: e.iles, + ...(e.categorie === 'fruit' ? { saison_mois: e.saison_mois } : {}), + // Les cinq plantes du module « Pa touché » sortent à comestible: false. + // C'est le défaut prudent, pas la vérité complète : l'akée mûre et la pomme-cajou + // se mangent sous conditions strictes. La nuance vit dans danger.resume et doit + // être arbitrée par un humain avant publication (voir docs/a-arbitrer.md). + comestible: e.categorie === 'fruit' ? (e.comestible ?? true) : false, + danger: normaliserDanger(e.danger), + indices: e.indices ?? {}, + medias: candidats, + audio: { gcf: null, locuteur: null }, + sources_factuelles: [], + valide: false + }; + + if (e.$comment) entree.$comment = e.$comment; + + await writeFile(chemin, JSON.stringify(entree, null, '\t') + '\n'); + console.log(`✔ ${e.id} — ${candidats.length} médias, ${entree.taxon.wikidata} / ${entree.taxon.gbif}`); + ecrits++; + } + + console.log(`\n${ecrits} entrée(s) écrite(s), ${ignores} conservée(s).`); +} + +main().catch((err) => { + console.error('✘', err.message); + process.exit(1); +}); diff --git a/tools/data/check-audio.mjs b/tools/data/check-audio.mjs new file mode 100644 index 0000000..86a8e15 --- /dev/null +++ b/tools/data/check-audio.mjs @@ -0,0 +1,86 @@ +#!/usr/bin/env node +/** + * check-audio.mjs — liste les enregistrements kréyòl manquants. + * + * Le brief §6 le demande explicitement : « prévois le contrat (audio.gcf, format .opus, + * repli silencieux si le fichier manque) et un script de vérification listant les + * enregistrements manquants. » + * + * Pas de synthèse vocale : ce script n'en fabrique aucune. Il produit une liste de courses + * pour la séance d'enregistrement — une après-midi de terrain vaut dix heures de code. + * + * Ce script n'échoue jamais : un enregistrement manquant est un travail à faire, + * pas un défaut de build. Le jeu doit se replier en silence. + */ + +import { readFile, readdir, writeFile, access } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); +const DATA = join(ROOT, 'src', 'lib', 'data', 'fruits'); +const STATIC = join(ROOT, 'static'); + +async function existe(p) { + try { + await access(p); + return true; + } catch { + return false; + } +} + +async function main() { + const fichiers = (await readdir(DATA)).filter((f) => f.endsWith('.json')).sort(); + const manquants = []; + const absents = []; + const presents = []; + + for (const f of fichiers) { + const e = JSON.parse(await readFile(join(DATA, f), 'utf8')); + if (!e.audio.gcf) { + manquants.push(e); + continue; + } + // Le chemin est absolu depuis la racine du site : /audio/.opus → static/audio/.opus + if (await existe(join(STATIC, e.audio.gcf))) presents.push(e); + else absents.push(e); + } + + const l = [ + '# 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/.opus`.", + '', + `## À enregistrer (${manquants.length})`, + '' + ]; + for (const e of manquants) l.push(`- [ ] **${e.noms.gcf}** — \`static/audio/${e.id}.opus\` _(${e.noms.fr ?? ''})_`); + l.push(''); + if (absents.length) { + l.push(`## Déclarés mais fichier introuvable (${absents.length})`, ''); + for (const e of absents) l.push(`- ⚠ \`${e.id}\` → \`${e.audio.gcf}\` absent de \`static/\``); + l.push(''); + } + if (presents.length) { + l.push(`## En place (${presents.length})`, ''); + for (const e of presents) l.push(`- ✔ \`${e.id}\` — ${e.audio.locuteur ?? 'locuteur non renseigné'}`); + l.push(''); + } + + await writeFile(join(ROOT, 'docs', 'audio-a-enregistrer.md'), l.join('\n')); + + console.log(`À enregistrer : ${manquants.length}`); + console.log(`Introuvables : ${absents.length}`); + console.log(`En place : ${presents.length}`); + console.log('\n docs/audio-a-enregistrer.md'); + if (absents.length) console.log("\n⚠ Des chemins audio sont déclarés sans fichier : le jeu se repliera en silence."); +} + +main().catch((e) => { + console.error('✘', e.stack ?? e.message); + process.exit(1); +}); diff --git a/tools/data/ingest-commons.mjs b/tools/data/ingest-commons.mjs new file mode 100644 index 0000000..6cff9fa --- /dev/null +++ b/tools/data/ingest-commons.mjs @@ -0,0 +1,217 @@ +#!/usr/bin/env node +/** + * ingest-commons.mjs — recherche de photographies candidates sur Wikimedia Commons. + * + * FILIÈRE A UNIQUEMENT (ADR 0004) : ce script ne produit que des photographies réelles, + * destinées aux épreuves d'identification. Aucun asset généré ne passe par ici. + * + * Ce que ce script fait : il interroge Commons, récupère pour chaque fichier l'auteur, + * la licence, l'URL du fichier et l'URL de sa page de description, et écarte tout ce + * dont la licence n'est pas explicitement libre. + * + * Ce que ce script NE fait PAS, et ne fera jamais : + * — il ne télécharge aucun fichier ; + * — il ne décide pas qu'une photo montre bien l'espèce annoncée. L'ordre des candidats + * est celui de la pertinence du moteur de recherche de Commons, ce qui n'est pas un + * jugement botanique. Tout candidat sort avec `valide: false` et le reste jusqu'à ce + * qu'un humain compétent tranche (brief §2, ADR 0004). + * + * Sorties : + * tools/data/out/commons-candidats.json — données brutes + * docs/planche-relecture-medias.md — planche de relecture pour le porteur + */ + +import { readFile, writeFile, mkdir } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); +const UA = 'ki-fwi-dataset/0.1 (https://o-k-i.net ; projet educatif ORGANISATION KA INTERNATIONALE)'; +const API = 'https://commons.wikimedia.org/w/api.php'; + +/** Nombre de candidats remontés par taxon. Le porteur en retiendra au moins deux. */ +const CANDIDATS_PAR_TAXON = 10; + +/** + * Licences acceptées, par préfixe de `LicenseShortName` normalisé. + * Commons n'héberge que du libre, mais on ne présume pas : on vérifie. + * Le champ `sa` marque le partage à l'identique, qui contamine les dérivés — d'où + * l'interdiction de compositing de l'ADR 0001. + */ +const LICENCES_OK = [ + { motif: /^cc0/i, id: 'CC0-1.0', attribution: false, sa: false }, + { motif: /^public domain|^pd-/i, id: 'PD', attribution: false, sa: false }, + { motif: /^cc by-sa 4/i, id: 'CC-BY-SA-4.0', attribution: true, sa: true }, + { motif: /^cc by-sa 3/i, id: 'CC-BY-SA-3.0', attribution: true, sa: true }, + { motif: /^cc by-sa 2\.5/i, id: 'CC-BY-SA-2.5', attribution: true, sa: true }, + { motif: /^cc by-sa 2/i, id: 'CC-BY-SA-2.0', attribution: true, sa: true }, + { motif: /^cc by 4/i, id: 'CC-BY-4.0', attribution: true, sa: false }, + { motif: /^cc by 3/i, id: 'CC-BY-3.0', attribution: true, sa: false }, + { motif: /^cc by 2/i, id: 'CC-BY-2.0', attribution: true, sa: false } +]; + +/** Retire le balisage HTML que Commons renvoie dans les champs d'attribution. */ +const texte = (html) => + html + ? String(html) + .replace(/<[^>]+>/g, ' ') + .replace(/\s+/g, ' ') + .trim() + : null; + +function classerLicence(nomCourt) { + if (!nomCourt) return null; + return LICENCES_OK.find((l) => l.motif.test(nomCourt.trim())) ?? null; +} + +async function getJson(params) { + const u = new URL(API); + for (const [k, v] of Object.entries(params)) u.searchParams.set(k, v); + const res = await fetch(u, { headers: { 'User-Agent': UA, Accept: 'application/json' } }); + if (!res.ok) throw new Error(`Commons ${res.status} ${res.statusText}`); + return res.json(); +} + +async function chercher(nomScientifique) { + const json = await getJson({ + action: 'query', + format: 'json', + formatversion: '2', + generator: 'search', + gsrsearch: `"${nomScientifique}" filetype:bitmap`, + gsrnamespace: '6', + gsrlimit: String(CANDIDATS_PAR_TAXON * 2), + prop: 'imageinfo', + iiprop: 'url|size|mime|extmetadata', + iiextmetadatafilter: 'LicenseShortName|LicenseUrl|Artist|Credit|ImageDescription|DateTimeOriginal' + }); + + const pages = json.query?.pages ?? []; + const retenus = []; + const ecartes = []; + + for (const p of pages) { + const info = p.imageinfo?.[0]; + if (!info) continue; + const meta = info.extmetadata ?? {}; + const nomCourt = texte(meta.LicenseShortName?.value); + const licence = classerLicence(nomCourt); + + const commun = { + titre: p.title, + auteur: texte(meta.Artist?.value) ?? texte(meta.Credit?.value), + licence_libelle: nomCourt, + url_fichier: info.url, + url_description: info.descriptionurl, + largeur: info.width, + hauteur: info.height, + mime: info.mime, + description: texte(meta.ImageDescription?.value)?.slice(0, 220) ?? null, + date_prise_de_vue: texte(meta.DateTimeOriginal?.value) + }; + + if (!licence) { + ecartes.push({ ...commun, raison: `licence non reconnue comme libre : ${nomCourt ?? 'absente'}` }); + continue; + } + if (licence.attribution && !commun.auteur) { + ecartes.push({ ...commun, raison: 'licence à attribution mais auteur introuvable dans les métadonnées' }); + continue; + } + retenus.push({ + ...commun, + licence: licence.id, + licence_url: texte(meta.LicenseUrl?.value), + attribution_requise: licence.attribution, + partage_identique: licence.sa + }); + } + + return { retenus: retenus.slice(0, CANDIDATS_PAR_TAXON), ecartes }; +} + +async function main() { + const seed = JSON.parse(await readFile(join(ROOT, 'fruits.seed.json'), 'utf8')); + const entrees = [ + ...seed.fruits.map((f) => ({ ...f, categorie: 'fruit' })), + ...seed.plantes_dangereuses.map((p) => ({ ...p, categorie: 'plante_dangereuse' })) + ]; + + const resultats = []; + for (const e of entrees) { + process.stdout.write(`→ Commons : ${e.taxon.scientifique}… `); + const { retenus, ecartes } = await chercher(e.taxon.scientifique); + console.log(`${retenus.length} candidats, ${ecartes.length} écartés`); + resultats.push({ + id: e.id, + categorie: e.categorie, + taxon: e.taxon.scientifique, + candidats: retenus, + ecartes + }); + } + + await mkdir(join(ROOT, 'tools', 'data', 'out'), { recursive: true }); + await writeFile( + join(ROOT, 'tools', 'data', 'out', 'commons-candidats.json'), + JSON.stringify({ genere_le: new Date().toISOString(), resultats }, null, 2) + '\n' + ); + + const insuffisants = resultats.filter((r) => r.candidats.length < 2); + const l = [ + '# Planche de relecture des médias — filière A', + '', + `> Généré par \`npm run ingest:commons\` le ${new Date().toISOString().slice(0, 10)}.`, + "> 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/.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.', + '' + ]; + for (const r of resultats) { + l.push(`## \`${r.id}\` — *${r.taxon}* (${r.categorie})`, ''); + if (!r.candidats.length) { + l.push('**Aucun candidat sous licence libre exploitable.** À photographier sur le terrain.', ''); + continue; + } + l.push('| # | fichier | auteur | licence | dimensions | page de description |'); + l.push('|---|---|---|---|---|---|'); + r.candidats.forEach((c, i) => { + const titre = c.titre.replace(/^File:/, '').replace(/\|/g, '\\|'); + const auteur = (c.auteur ?? '—').replace(/\|/g, '\\|').slice(0, 60); + l.push( + `| ${i + 1} | ${titre.slice(0, 70)} | ${auteur} | ${c.licence} | ${c.largeur}×${c.hauteur} | [voir](${c.url_description}) |` + ); + }); + l.push(''); + if (r.ecartes.length) { + l.push(`
${r.ecartes.length} fichier(s) écarté(s) automatiquement`, ''); + for (const x of r.ecartes) l.push(`- ${x.titre} — ${x.raison}`); + l.push('', '
', ''); + } + } + if (insuffisants.length) { + l.push('## Taxons sous le seuil de deux candidats', ''); + for (const r of insuffisants) l.push(`- \`${r.id}\` (*${r.taxon}*) — ${r.candidats.length} candidat(s)`); + l.push(''); + } + await writeFile(join(ROOT, 'docs', 'planche-relecture-medias.md'), l.join('\n')); + + const total = resultats.reduce((n, r) => n + r.candidats.length, 0); + console.log(`\n✔ ${total} candidats sur ${resultats.length} taxons — 0 validé (état attendu).`); + if (insuffisants.length) console.log(`⚠ ${insuffisants.length} taxon(s) sous deux candidats.`); + console.log(' tools/data/out/commons-candidats.json'); + console.log(' docs/planche-relecture-medias.md'); +} + +main().catch((err) => { + console.error('✘', err.message); + process.exit(1); +}); diff --git a/tools/data/out/commons-candidats.json b/tools/data/out/commons-candidats.json new file mode 100644 index 0000000..3973a8f --- /dev/null +++ b/tools/data/out/commons-candidats.json @@ -0,0 +1,2258 @@ +{ + "genere_le": "2026-07-27T03:30:32.573Z", + "resultats": [ + { + "id": "kowosol", + "categorie": "fruit", + "taxon": "Annona muricata", + "candidats": [ + { + "titre": "File:Soursop fruit.jpg", + "auteur": "USGov", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/a/a8/Soursop_fruit.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Soursop_fruit.jpg", + "largeur": 365, + "hauteur": 274, + "mime": "image/jpeg", + "description": "Picture of soursop fruit, Annona muricata", + "date_prise_de_vue": "uploaded on 9 November 2005", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Annona muricata 1.jpg", + "auteur": "Damien Boilley from suburbs of Paris, France", + "licence_libelle": "CC BY 2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/6d/Annona_muricata_1.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_muricata_1.jpg", + "largeur": 960, + "hauteur": 1280, + "mime": "image/jpeg", + "description": "Soursop fruit ( Annona muricata ). Photograph taken at the Jardin d'Éden botanical park, Saint-Gilles les Bains ( commune of Saint-Paul ), Réunion Island (Indian Ocean, a part of the French Republic).", + "date_prise_de_vue": "2006-01-05", + "licence": "CC-BY-2.0", + "licence_url": "https://creativecommons.org/licenses/by/2.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Annona muricata2.jpg", + "auteur": "User:Hans_B.", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/bd/Annona_muricata2.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_muricata2.jpg", + "largeur": 2592, + "hauteur": 1944, + "mime": "image/jpeg", + "description": "Annona muricata , bought at the Binnenrotte market in Rotterdam, The Netherlands", + "date_prise_de_vue": "2006-05-30", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Annona muricata Blanco1.196-cropped.jpg", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/f4/Annona_muricata_Blanco1.196-cropped.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_muricata_Blanco1.196-cropped.jpg", + "largeur": 1300, + "hauteur": 1620, + "mime": "image/jpeg", + "description": "Plate from book", + "date_prise_de_vue": "1880-1883?", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Kleine zuurzak Maria Sibylla Merian 1705 plate III.png", + "auteur": "Maria Sibylla Merian ; engraved by I. Mulder", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/0c/Kleine_zuurzak_Maria_Sibylla_Merian_1705_plate_III.png", + "url_description": "https://commons.wikimedia.org/wiki/File:Kleine_zuurzak_Maria_Sibylla_Merian_1705_plate_III.png", + "largeur": 1252, + "hauteur": 1852, + "mime": "image/png", + "description": "kleine zuurzak ( Annona muricata ) plate III. See text at 13:3 (GDZ Göttingen)", + "date_prise_de_vue": "1705", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Guanábana-2.jpg", + "auteur": "ViajeroExtraviado", + "licence_libelle": "CC0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/12/Guan%C3%A1bana-2.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Guan%C3%A1bana-2.jpg", + "largeur": 2446, + "hauteur": 2444, + "mime": "image/jpeg", + "description": "Annona muricata over white background.", + "date_prise_de_vue": "2021-06-22 11:59:08", + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Aksara Karo Pohon sirsak.jpg", + "auteur": "Agus Damanik", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/32/Aksara_Karo_Pohon_sirsak.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Aksara_Karo_Pohon_sirsak.jpg", + "largeur": 3906, + "hauteur": 5859, + "mime": "image/jpeg", + "description": "Aksata Karo Pohon sirsak", + "date_prise_de_vue": "2022-10-28", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Un Corossolier 02.jpg", + "auteur": "Bérenger504", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/3b/Un_Corossolier_02.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Un_Corossolier_02.jpg", + "largeur": 6000, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "La lumière pénétrant un corossolier.", + "date_prise_de_vue": "2023-04-08 12:23:44", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Un Corossolier 01.jpg", + "auteur": "Bérenger504", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/c8/Un_Corossolier_01.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Un_Corossolier_01.jpg", + "largeur": 6000, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "La lumière pénétrant un corossolier.", + "date_prise_de_vue": "2023-04-08 12:23:29", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Un Corossolier 03.jpg", + "auteur": "Bérenger504", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/ee/Un_Corossolier_03.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Un_Corossolier_03.jpg", + "largeur": 6000, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "La lumière pénétrant un corossolier.", + "date_prise_de_vue": "2023-04-08 12:23:57", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [] + }, + { + "id": "kenet", + "categorie": "fruit", + "taxon": "Melicoccus bijugatus", + "candidats": [ + { + "titre": "File:Melicoccus bijugatus.jpg", + "auteur": "No machine-readable author provided. Hans B.~commonswiki assumed (based on copyright claims).", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/6e/Melicoccus_bijugatus.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Melicoccus_bijugatus.jpg", + "largeur": 2126, + "hauteur": 1757, + "mime": "image/jpeg", + "description": "Melicoccus bijugatus bought at the Visserijplein market in Rotterdam, The Netherlands", + "date_prise_de_vue": "18 May 2006 (original upload date)", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Cebus capucinus Puntarenas Costa Rica.jpg", + "auteur": "kansasphoto", + "licence_libelle": "CC BY 2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Cebus_capucinus_Puntarenas_Costa_Rica.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Cebus_capucinus_Puntarenas_Costa_Rica.jpg", + "largeur": 3924, + "hauteur": 2616, + "mime": "image/jpeg", + "description": "Cebus capucinus , picture taked in Puntarenas, Costa Rica.", + "date_prise_de_vue": "2009-04-09", + "licence": "CC-BY-2.0", + "licence_url": "https://creativecommons.org/licenses/by/2.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Una rama de mamon.jpeg", + "auteur": "EEIM", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/4f/Una_rama_de_mamon.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Una_rama_de_mamon.jpeg", + "largeur": 3264, + "hauteur": 2448, + "mime": "image/jpeg", + "description": "ramas", + "date_prise_de_vue": "8 December 2015 (according to Exif data)", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Arbol de Huaya (Melicoccus bijugatus).jpg", + "auteur": "Acarcano", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/b3/Arbol_de_Huaya_%28Melicoccus_bijugatus%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Arbol_de_Huaya_(Melicoccus_bijugatus).jpg", + "largeur": 2336, + "hauteur": 4160, + "mime": "image/jpeg", + "description": "Arbol de Huaya ( Melicoccus bijugatus)", + "date_prise_de_vue": "2016-07-25 19:18:13", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Melicoccus bijugatus tree.jpg", + "auteur": "daveynin", + "licence_libelle": "CC BY 2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/58/Melicoccus_bijugatus_tree.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Melicoccus_bijugatus_tree.jpg", + "largeur": 2304, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Melicoccus bijugatus tree on Reef Bay Trail, Virgin Islands National Park in St. John, US Virgin Islands.", + "date_prise_de_vue": "2015-06-26 08:38:19", + "licence": "CC-BY-2.0", + "licence_url": "https://creativecommons.org/licenses/by/2.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Panelera Corozal El Triangulo 07.jpg", + "auteur": "Akire gatuna", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/d5/Panelera_Corozal_El_Triangulo_07.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Panelera_Corozal_El_Triangulo_07.jpg", + "largeur": 2160, + "hauteur": 3840, + "mime": "image/jpeg", + "description": "Árbol de mamoncillo en la panelera o \"Trapiche\" Corozal El Triangulo, donde se procesa la caña de azúcar para convertirla en panela", + "date_prise_de_vue": "2017-12-07 09:14:48", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Starr-091104-9193-Melicoccus bijugatus-plant tag-Kahanu Gardens NTBG Kaeleku Hana-Maui (24361925823).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/56/Starr-091104-9193-Melicoccus_bijugatus-plant_tag-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_%2824361925823%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-091104-9193-Melicoccus_bijugatus-plant_tag-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24361925823).jpg", + "largeur": 3648, + "hauteur": 2736, + "mime": "image/jpeg", + "description": "Melicoccus bijugatus (Spanish lime, genip, mamoncillo) Plant tag at Kahanu Gardens NTBG Kaeleku Hana, Maui, Hawaii. November 04, 2009 #091104-9193 Image Use Policy", + "date_prise_de_vue": "2009-11-04 13:57", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-091104-9194-Melicoccus bijugatus-trunk and canopy-Kahanu Gardens NTBG Kaeleku Hana-Maui (24870791022).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/a/af/Starr-091104-9194-Melicoccus_bijugatus-trunk_and_canopy-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_%2824870791022%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-091104-9194-Melicoccus_bijugatus-trunk_and_canopy-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24870791022).jpg", + "largeur": 2736, + "hauteur": 3648, + "mime": "image/jpeg", + "description": "Melicoccus bijugatus (Spanish lime, genip, mamoncillo) Trunk and canopy at Kahanu Gardens NTBG Kaeleku Hana, Maui, Hawaii. November 04, 2009 #091104-9194 Image Use Policy", + "date_prise_de_vue": "2009-11-04 13:57", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-091104-9196-Melicoccus bijugatus-leaves-Kahanu Gardens NTBG Kaeleku Hana-Maui (24361932503).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/63/Starr-091104-9196-Melicoccus_bijugatus-leaves-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_%2824361932503%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-091104-9196-Melicoccus_bijugatus-leaves-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24361932503).jpg", + "largeur": 3648, + "hauteur": 2736, + "mime": "image/jpeg", + "description": "Melicoccus bijugatus (Spanish lime, genip, mamoncillo) Leaves at Kahanu Gardens NTBG Kaeleku Hana, Maui, Hawaii. November 04, 2009 #091104-9196 Image Use Policy", + "date_prise_de_vue": "2009-11-04 13:57", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-091104-9197-Melicoccus bijugatus-leaves-Kahanu Gardens NTBG Kaeleku Hana-Maui (24870797672).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/9/9c/Starr-091104-9197-Melicoccus_bijugatus-leaves-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_%2824870797672%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-091104-9197-Melicoccus_bijugatus-leaves-Kahanu_Gardens_NTBG_Kaeleku_Hana-Maui_(24870797672).jpg", + "largeur": 2736, + "hauteur": 3648, + "mime": "image/jpeg", + "description": "Melicoccus bijugatus (Spanish lime, genip, mamoncillo) Leaves at Kahanu Gardens NTBG Kaeleku Hana, Maui, Hawaii. November 04, 2009 #091104-9197 Image Use Policy", + "date_prise_de_vue": "2009-11-04 13:57", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + } + ], + "ecartes": [] + }, + { + "id": "gouyav", + "categorie": "fruit", + "taxon": "Psidium guajava", + "candidats": [ + { + "titre": "File:Psidium guajava fruit (2).jpg", + "auteur": "Own work", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/19/Psidium_guajava_fruit_%282%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Psidium_guajava_fruit_(2).jpg", + "largeur": 744, + "hauteur": 768, + "mime": "image/jpeg", + "description": "Guava fruit bought and photographed in Taiwan. Binomial name is tentative.", + "date_prise_de_vue": "Taken on 20 January 2004", + "licence": "CC-BY-SA-3.0", + "licence_url": "http://creativecommons.org/licenses/by-sa/3.0/", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Apple Guava.jpg", + "auteur": "Fuadsyazwan ( talk )", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/34/Apple_Guava.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Apple_Guava.jpg", + "largeur": 1632, + "hauteur": 1224, + "mime": "image/jpeg", + "description": "A shot of apple guava", + "date_prise_de_vue": "6 March 2008 (original upload date) ( Original text: 06 March 2008 )", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Starr-111012-8771-Psidium guajava-burnt fruit-Kahana-Maui (24488703784).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/cb/Starr-111012-8771-Psidium_guajava-burnt_fruit-Kahana-Maui_%2824488703784%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-111012-8771-Psidium_guajava-burnt_fruit-Kahana-Maui_(24488703784).jpg", + "largeur": 2592, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Psidium guajava (Guava) Burnt fruit at Kahana, Maui, Hawaii. October 12, 2011 #111012-8771 Image Use Policy", + "date_prise_de_vue": "2011-10-12 10:51", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Fruta de Goiaba.jpg", + "auteur": "Zezinho68", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/70/Fruta_de_Goiaba.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Fruta_de_Goiaba.jpg", + "largeur": 6016, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "Unripe guava fruit (Psidium guajava).", + "date_prise_de_vue": "2017-11-26 17:38:43", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Guava Tree below the sky 01.jpg", + "auteur": "Sabina Bajracharya", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/16/Guava_Tree_below_the_sky_01.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Guava_Tree_below_the_sky_01.jpg", + "largeur": 3456, + "hauteur": 4608, + "mime": "image/jpeg", + "description": "Guava Tree below the sky", + "date_prise_de_vue": "2020-05-31 09:29:33", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Guava Tree below the sky 02.jpg", + "auteur": "Sabina Bajracharya", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/58/Guava_Tree_below_the_sky_02.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Guava_Tree_below_the_sky_02.jpg", + "largeur": 3456, + "hauteur": 4608, + "mime": "image/jpeg", + "description": "Guava Tree below the sky", + "date_prise_de_vue": "2020-05-31 09:30:43", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Guava Tree 161120.jpg", + "auteur": "Sabina Bajracharya", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/df/Guava_Tree_161120.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Guava_Tree_161120.jpg", + "largeur": 3024, + "hauteur": 4032, + "mime": "image/jpeg", + "description": "Guava Tree", + "date_prise_de_vue": "2020-06-08 16:11:20", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Guava Tree 161116.jpg", + "auteur": "Sabina Bajracharya", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/b6/Guava_Tree_161116.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Guava_Tree_161116.jpg", + "largeur": 3024, + "hauteur": 4032, + "mime": "image/jpeg", + "description": "Guava Tree", + "date_prise_de_vue": "2020-06-08 16:11:16", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Guava Leaves.jpg", + "auteur": "Arjot", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/a/ae/Guava_Leaves.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Guava_Leaves.jpg", + "largeur": 3000, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "Leaves of Guava (Psidium guajava)", + "date_prise_de_vue": "2020-07-11", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Common Guava.jpg", + "auteur": "Gaurav Dhwaj Khadka", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/4d/Common_Guava.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Common_Guava.jpg", + "largeur": 3024, + "hauteur": 4032, + "mime": "image/jpeg", + "description": "Common Guava.", + "date_prise_de_vue": "20 January 2021 (according to Exif data)", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [] + }, + { + "id": "pom-site", + "categorie": "fruit", + "taxon": "Spondias dulcis", + "candidats": [ + { + "titre": "File:Spondia dulcis Blanco1.132.png", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/3a/Spondia_dulcis_Blanco1.132.png", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.png", + "largeur": 1417, + "hauteur": 2107, + "mime": "image/png", + "description": "Plate from book", + "date_prise_de_vue": "1880-1883?", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Spondia dulcis Blanco1.132-cropped.jpg", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/38/Spondia_dulcis_Blanco1.132-cropped.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132-cropped.jpg", + "largeur": 1270, + "hauteur": 1770, + "mime": "image/jpeg", + "description": "Plate from book", + "date_prise_de_vue": "1880-1883?", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Spondia dulcis Blanco1.132.jpg", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/22/Spondia_dulcis_Blanco1.132.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondia_dulcis_Blanco1.132.jpg", + "largeur": 1417, + "hauteur": 2107, + "mime": "image/jpeg", + "description": "Plate from book", + "date_prise_de_vue": "1880-1883?", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Starr 980529-4218 Spondias dulcis.jpg", + "auteur": "Forest & Kim Starr", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/08/Starr_980529-4218_Spondias_dulcis.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_980529-4218_Spondias_dulcis.jpg", + "largeur": 1800, + "hauteur": 1200, + "mime": "image/jpeg", + "description": "Spondias dulcis (habit). Location: Maui, Enchanting Floral Gardens of Kula", + "date_prise_de_vue": "1998-05-29", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Owoce Śliwiec słodki.jpg", + "auteur": "Agnieszka Kwiecień, Nova", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/1d/Owoce_%C5%9Aliwiec_s%C5%82odki.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Owoce_%C5%9Aliwiec_s%C5%82odki.jpg", + "largeur": 1024, + "hauteur": 1024, + "mime": "image/jpeg", + "description": "Grafika podręcznika b:pl:Wikijunior:Owoce . Śliwiec słodki ( Spondias dulcis ).", + "date_prise_de_vue": "2009-03-25 21:47", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Spondias dulcis seeds.jpg", + "auteur": "Tracey Slotta @ USDA-NRCS PLANTS Database", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/10/Spondias_dulcis_seeds.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondias_dulcis_seeds.jpg", + "largeur": 900, + "hauteur": 600, + "mime": "image/jpeg", + "description": "Seeds of Spondias dulcis", + "date_prise_de_vue": null, + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:2014-10-11 Spondias dulcis Goldpflaume anagoria.JPG", + "auteur": "Anagoria", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/dc/2014-10-11_Spondias_dulcis_Goldpflaume_anagoria.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:2014-10-11_Spondias_dulcis_Goldpflaume_anagoria.JPG", + "largeur": 3750, + "hauteur": 3168, + "mime": "image/jpeg", + "description": "Polynesian-plum (Spondias dulcis), bought at Dong Xuan Center, Berlin, Germany", + "date_prise_de_vue": "2014-10-11", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Buah kedondong by JJ.jpg", + "auteur": "Rombituon", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5c/Buah_kedondong_by_JJ.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Buah_kedondong_by_JJ.jpg", + "largeur": 3000, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "Buah kedondong di perkarangan asrama IPG Kent.", + "date_prise_de_vue": "2023-12-03 17:39:13", + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Spondias dulcis in Tropical Dream Center, Okinawa.jpg", + "auteur": "M108t", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/d9/Spondias_dulcis_in_Tropical_Dream_Center%2C_Okinawa.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondias_dulcis_in_Tropical_Dream_Center,_Okinawa.jpg", + "largeur": 3000, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "アマヤニリンゴ(タヒチモンビン)(2025年1月 沖縄県本部町 熱帯ドリームセンター)", + "date_prise_de_vue": "2025-01-12 09:36:28", + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Spondias dulcis leaves in Tropical Dream Center, Okinawa.jpg", + "auteur": "M108t", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/8/85/Spondias_dulcis_leaves_in_Tropical_Dream_Center%2C_Okinawa.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Spondias_dulcis_leaves_in_Tropical_Dream_Center,_Okinawa.jpg", + "largeur": 4000, + "hauteur": 3000, + "mime": "image/jpeg", + "description": "アマヤニリンゴ(タヒチモンビン)の葉(2025年1月 沖縄県本部町 熱帯ドリームセンター)", + "date_prise_de_vue": "2025-01-12 09:36:08", + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + } + ], + "ecartes": [] + }, + { + "id": "zikak", + "categorie": "fruit", + "taxon": "Chrysobalanus icaco", + "candidats": [ + { + "titre": "File:Starr 031108-2161 Chrysobalanus icaco.jpg", + "auteur": "Forest & Kim Starr", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/de/Starr_031108-2161_Chrysobalanus_icaco.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_031108-2161_Chrysobalanus_icaco.jpg", + "largeur": 1632, + "hauteur": 1224, + "mime": "image/jpeg", + "description": "Chrysobalanus icaco (flowers). Location: Florida, Long Key", + "date_prise_de_vue": "2003-11-08", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Chrysobalanus icaco (inflorescense).jpg", + "auteur": "Hans Hillewaert", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/3e/Chrysobalanus_icaco_%28inflorescense%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_(inflorescense).jpg", + "largeur": 2473, + "hauteur": 3297, + "mime": "image/jpeg", + "description": "Cocoplum near Cahuita, Costa Rica", + "date_prise_de_vue": "2009-08-16", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Flore médicale des Antilles, ou, Traité des plantes usuelles (Pl. 84) (8201963925).jpg", + "auteur": "Descourtilz, J. Theodore.; Descourtilz, M. E.; Pichard.", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/e3/Flore_m%C3%A9dicale_des_Antilles%2C_ou%2C_Trait%C3%A9_des_plantes_usuelles_%28Pl._84%29_%288201963925%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Flore_m%C3%A9dicale_des_Antilles,_ou,_Trait%C3%A9_des_plantes_usuelles_(Pl._84)_(8201963925).jpg", + "largeur": 1567, + "hauteur": 2592, + "mime": "image/jpeg", + "description": "li. 84- T 4 mt6k i /Wvw^mV^^ /W lA-Mrr*' ^ îCAOriKH I.'AMKR101^K.", + "date_prise_de_vue": "1822", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Chrysobalanus icaco (Chrysobalanaceae) 01.jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/7b/Chrysobalanus_icaco_%28Chrysobalanaceae%29_01.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_(Chrysobalanaceae)_01.jpg", + "largeur": 2112, + "hauteur": 2304, + "mime": "image/jpeg", + "description": "Fruits et feuilles de Chrysobalanus icaco", + "date_prise_de_vue": "2018-08-20 07:46:04", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Fruit et feuilles de Chrysobalanus icaco (Chrysobalanaceae).jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Fruit_et_feuilles_de_Chrysobalanus_icaco_%28Chrysobalanaceae%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Fruit_et_feuilles_de_Chrysobalanus_icaco_(Chrysobalanaceae).jpg", + "largeur": 2321, + "hauteur": 3095, + "mime": "image/jpeg", + "description": "Chrysobalanus icaco fruit and leaves", + "date_prise_de_vue": "2018-08-22 12:01:03", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Icaques.jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/fe/Icaques.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Icaques.jpg", + "largeur": 3008, + "hauteur": 2753, + "mime": "image/jpeg", + "description": "Icaco plum", + "date_prise_de_vue": "2019-06-17 17:17:24", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Icaques - fruits.jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/59/Icaques_-_fruits.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Icaques_-_fruits.jpg", + "largeur": 2950, + "hauteur": 3500, + "mime": "image/jpeg", + "description": "Coco-plum", + "date_prise_de_vue": "2019-06-17 17:16:52", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Foliorum compositio - Alterna.jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/7f/Foliorum_compositio_-_Alterna.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Foliorum_compositio_-_Alterna.jpg", + "largeur": 620, + "hauteur": 720, + "mime": "image/jpeg", + "description": "Foliorum compositio", + "date_prise_de_vue": "2019-08-02 04:51:20", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Chrysobalanus icaco - Fruits 01.jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/f7/Chrysobalanus_icaco_-_Fruits_01.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_-_Fruits_01.jpg", + "largeur": 1534, + "hauteur": 2048, + "mime": "image/jpeg", + "description": "Coco plum", + "date_prise_de_vue": "2020-05-18 14:32:32", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Chrysobalanus icaco - Fruits 02.jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/56/Chrysobalanus_icaco_-_Fruits_02.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Chrysobalanus_icaco_-_Fruits_02.jpg", + "largeur": 2261, + "hauteur": 2528, + "mime": "image/jpeg", + "description": "Coco plum", + "date_prise_de_vue": "2020-05-18 14:32:22", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [] + }, + { + "id": "pom-kannel", + "categorie": "fruit", + "taxon": "Annona squamosa", + "candidats": [ + { + "titre": "File:Annona squamosa (Custurd Apple) plant in Hyderabad, AP W IMG 9354.jpg", + "auteur": "J.M.Garg", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5a/Annona_squamosa_%28Custurd_Apple%29_plant_in_Hyderabad%2C_AP_W_IMG_9354.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_squamosa_(Custurd_Apple)_plant_in_Hyderabad,_AP_W_IMG_9354.jpg", + "largeur": 800, + "hauteur": 533, + "mime": "image/jpeg", + "description": "Custard-apple, sugar-apple, sweetsop, sitaphal or Sita's fruit, shareefah, aataa or Rahmapfel Annona squamosa in Hyderabad , India .", + "date_prise_de_vue": "2008-09-13", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Annona squamosa-fruits-leaves.jpg", + "auteur": "Jim Conrad", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/8/8d/Annona_squamosa-fruits-leaves.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_squamosa-fruits-leaves.jpg", + "largeur": 650, + "hauteur": 419, + "mime": "image/jpeg", + "description": "The syncarpous fruits of an Annona squamosa tree growing near Sabacché, Yucatán, MÉXICO.", + "date_prise_de_vue": "2008-08-18", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Sharifa.JPG", + "auteur": "Miansari66", + "licence_libelle": "CC0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/47/Sharifa.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Sharifa.JPG", + "largeur": 2816, + "hauteur": 2112, + "mime": "image/jpeg", + "description": "Sharifa in urdu, Custard apple in english", + "date_prise_de_vue": null, + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Annona squamosa leaves at Madhurawada.JPG", + "auteur": "Adityamadhav83", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/bd/Annona_squamosa_leaves_at_Madhurawada.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_squamosa_leaves_at_Madhurawada.JPG", + "largeur": 3839, + "hauteur": 2310, + "mime": "image/jpeg", + "description": "Annona squamosa leaves closeup (Custard Apple tree) at Madhurawada, Visakhapatnam", + "date_prise_de_vue": "2012-06-29 16:59:27", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Custard apple tree in Hainan - 04.JPG", + "auteur": "Anna Frodesiak", + "licence_libelle": "CC0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/bf/Custard_apple_tree_in_Hainan_-_04.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Custard_apple_tree_in_Hainan_-_04.JPG", + "largeur": 4000, + "hauteur": 3000, + "mime": "image/jpeg", + "description": "Annona squamosa (custard apple) tree in Hainan, China", + "date_prise_de_vue": "2013-06-12 05:08:56", + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:1901jfAnnona squamosa Tarlacfvf 01.JPG", + "auteur": "Judgefloro", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/35/1901jfAnnona_squamosa_Tarlacfvf_01.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:1901jfAnnona_squamosa_Tarlacfvf_01.JPG", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Annona squamosa Atis fruit, sugar apple in Barangay Malupa , Concepcion, Tarlac", + "date_prise_de_vue": "2015-06-12 15:36:06", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Annona squamosa L. (9327977712).jpg", + "auteur": "Dinesh Valke from Thane, India", + "licence_libelle": "CC BY-SA 2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/c5/Annona_squamosa_L._%289327977712%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_squamosa_L._(9327977712).jpg", + "largeur": 4284, + "hauteur": 5868, + "mime": "image/jpeg", + "description": "Annonaceae (custard apple, sugar apple, or soursop family) » Annona squamosa uh-NO-nuh -- Latinized form of the American Indian taino , vernacular name for cherimoya skwa-MO-suh -- scaly commonly known as : custard apple", + "date_prise_de_vue": "2013-07-20 18:28", + "licence": "CC-BY-SA-2.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/2.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Annona squamosa in Jardin des Plantes de Toulouse 02.jpg", + "auteur": "Krzysztof Golik", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Annona_squamosa_in_Jardin_des_Plantes_de_Toulouse_02.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Annona_squamosa_in_Jardin_des_Plantes_de_Toulouse_02.jpg", + "largeur": 4000, + "hauteur": 4722, + "mime": "image/jpeg", + "description": "Annona squamosa in Jardin des Plantes de Toulouse", + "date_prise_de_vue": "2016-09-15 15:45:42", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:0158jfMalolos Historic Town Center Heritage Bulacanfvf 23.jpg", + "auteur": "Judgefloro", + "licence_libelle": "CC0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/70/0158jfMalolos_Historic_Town_Center_Heritage_Bulacanfvf_23.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:0158jfMalolos_Historic_Town_Center_Heritage_Bulacanfvf_23.jpg", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Atis (fruit) Bayabas Guava (Philippines) Gramineae Tanglad Cymbopogon citratus (DC.) Stapf Xiang mao Lemon grass or Cymbopogon citratus Malolos Historic Town Center and Heritage District of Barangay Santo Niño 14°50'33\"N", + "date_prise_de_vue": "2017-08-13 15:30:00", + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Custard Apple - സീത പഴം 01.jpg", + "auteur": "Shijan Kaakkara", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/17/Custard_Apple_-_%E0%B4%B8%E0%B5%80%E0%B4%A4_%E0%B4%AA%E0%B4%B4%E0%B4%82_01.jpg", + "url_description": "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", + "largeur": 3648, + "hauteur": 2736, + "mime": "image/jpeg", + "description": "Custard Apple - സീതപ്പഴം", + "date_prise_de_vue": "2013-12-12 17:02:44", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [ + { + "titre": "File:Mygarden.JPG", + "auteur": "Rushikesh Tade", + "licence_libelle": "Attribution", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/ef/Mygarden.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Mygarden.JPG", + "largeur": 2304, + "hauteur": 1728, + "mime": "image/jpeg", + "description": "This is the fruit in my garden", + "date_prise_de_vue": "2009-08-19", + "raison": "licence non reconnue comme libre : Attribution" + }, + { + "titre": "File:Sugar apple on tree.jpg", + "auteur": "Muhammad Mahdi Karim", + "licence_libelle": "GFDL 1.2", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/42/Sugar_apple_on_tree.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Sugar_apple_on_tree.jpg", + "largeur": 1067, + "hauteur": 1600, + "mime": "image/jpeg", + "description": "Sugar apple on a tree", + "date_prise_de_vue": "2010", + "raison": "licence non reconnue comme libre : GFDL 1.2" + } + ] + }, + { + "id": "fwiyapen", + "categorie": "fruit", + "taxon": "Artocarpus altilis", + "candidats": [ + { + "titre": "File:Artocarpus incisus Blanco2.267.png", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5e/Artocarpus_incisus_Blanco2.267.png", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_incisus_Blanco2.267.png", + "largeur": 1379, + "hauteur": 2020, + "mime": "image/png", + "description": "Artocarpus incisa Blanco (inside Artocarpus altilis species)", + "date_prise_de_vue": "1880-1883?", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Starr 031209-0031 Artocarpus altilis.jpg", + "auteur": "Forest & Kim Starr", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/78/Starr_031209-0031_Artocarpus_altilis.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_031209-0031_Artocarpus_altilis.jpg", + "largeur": 1632, + "hauteur": 1224, + "mime": "image/jpeg", + "description": "Artocarpus altilis (leaves and fruit). Location: Maui, Puehuihueiki cemetary Lahaina", + "date_prise_de_vue": "2003-12-09", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Artocarpus altilis (fruit).jpg", + "auteur": "Hans Hillewaert", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/57/Artocarpus_altilis_%28fruit%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_(fruit).jpg", + "largeur": 2848, + "hauteur": 3799, + "mime": "image/jpeg", + "description": "Breadfruit at Tortuguero, Costa Rica", + "date_prise_de_vue": "2009-08-12", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Artocarpus altilis 439799696.jpg", + "auteur": "Bonnie Isaac", + "licence_libelle": "CC0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/27/Artocarpus_altilis_439799696.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_439799696.jpg", + "largeur": 2048, + "hauteur": 1362, + "mime": "image/jpeg", + "description": "Breadfruit ( Artocarpus altilis ) in Puerto Rico", + "date_prise_de_vue": "2013-03-15", + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Artocarpus altilis 399504710.jpg", + "auteur": "Marilyne Busque-Dubois", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/9/98/Artocarpus_altilis_399504710.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_399504710.jpg", + "largeur": 1440, + "hauteur": 1080, + "mime": "image/jpeg", + "description": "Breadfruit ( Artocarpus altilis ) in Jamaica", + "date_prise_de_vue": "2024-05-18", + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Artocarpus altilis 376055544.jpg", + "auteur": "renjus box", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/8/8a/Artocarpus_altilis_376055544.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_376055544.jpg", + "largeur": 2048, + "hauteur": 1401, + "mime": "image/jpeg", + "description": "Breadfruit ( Artocarpus altilis ) in India", + "date_prise_de_vue": "2024-04-29", + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Artocarpus altilis 366760782.jpg", + "auteur": "Akshay", + "licence_libelle": "CC0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/f4/Artocarpus_altilis_366760782.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_366760782.jpg", + "largeur": 2048, + "hauteur": 1536, + "mime": "image/jpeg", + "description": "Breadfruit ( Artocarpus altilis ) in Sri Lanka", + "date_prise_de_vue": "2021-07-29", + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Artocarpus altilis 360470185.jpg", + "auteur": "Mike Bowie", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/2d/Artocarpus_altilis_360470185.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_360470185.jpg", + "largeur": 1536, + "hauteur": 2048, + "mime": "image/jpeg", + "description": "Breadfruit ( Artocarpus altilis ) in Cook Islands", + "date_prise_de_vue": "2024-03-25", + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Artocarpus altilis 355237308.jpg", + "auteur": "monkeyjodey", + "licence_libelle": "CC0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/27/Artocarpus_altilis_355237308.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_355237308.jpg", + "largeur": 1536, + "hauteur": 2048, + "mime": "image/jpeg", + "description": "Breadfruit ( Artocarpus altilis ) in Montserrat", + "date_prise_de_vue": "2024-03-03", + "licence": "CC0-1.0", + "licence_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en", + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Artocarpus altilis 348826407.jpg", + "auteur": "Kiwi Shen", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/55/Artocarpus_altilis_348826407.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Artocarpus_altilis_348826407.jpg", + "largeur": 1536, + "hauteur": 2048, + "mime": "image/jpeg", + "description": "Breadfruit ( Artocarpus altilis ) in the Maldives", + "date_prise_de_vue": "2024-01-30", + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + } + ], + "ecartes": [] + }, + { + "id": "pom-dlo", + "categorie": "fruit", + "taxon": "Syzygium samarangense", + "candidats": [ + { + "titre": "File:Champanga flower buds.jpg", + "auteur": "Vinayaraj", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/2c/Champanga_flower_buds.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Champanga_flower_buds.jpg", + "largeur": 2073, + "hauteur": 1590, + "mime": "image/jpeg", + "description": "Champanga flower buds", + "date_prise_de_vue": "2005-04-19", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Lainwu (Wax apple) diamond P00063.JPG", + "auteur": "Taiwan7007", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/39/Lainwu_%28Wax_apple%29_diamond_P00063.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Lainwu_(Wax_apple)_diamond_P00063.JPG", + "largeur": 308, + "hauteur": 330, + "mime": "image/jpeg", + "description": "Black pearl wax apples. Photo by Yu Jen, Su.", + "date_prise_de_vue": "2005-07-08", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:9956kfSyzygium samarangense Pampangafvf 05.JPG", + "auteur": "Judgefloro", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/ed/9956kfSyzygium_samarangense_Pampangafvf_05.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:9956kfSyzygium_samarangense_Pampangafvf_05.JPG", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Syzygium samarangense in Barangay Santo Niño , San Fernando, Pampanga - San Fernando Subdivision Santo Niño .", + "date_prise_de_vue": "2015-04-22 14:33:45", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Atlas der baumarten von Java (Figur 452) BHL47163274.jpg", + "auteur": "Koorders, S. H.; Valeton, Theodoric", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/9/97/Atlas_der_baumarten_von_Java_%28Figur_452%29_BHL47163274.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Atlas_der_baumarten_von_Java_(Figur_452)_BHL47163274.jpg", + "largeur": 2145, + "hauteur": 3322, + "mime": "image/jpeg", + "description": "Atlas der baumarten von Java : im anschluss an die \"Bijdragen tot de kennis der boomsoorten van Java\" / zusammengestellt von dr. S.H. Koorders und dr. Th. Valeton ; mit unterstützung der Niederländsch- indischen regierun", + "date_prise_de_vue": "1915", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:09564jfSan Rafael Bulacan Maasim River Diliman Paddy Vegetable Fields Roadsfvf 12.JPG", + "auteur": "Judgefloro", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/9/9f/09564jfSan_Rafael_Bulacan_Maasim_River_Diliman_Paddy_Vegetable_Fields_Roadsfvf_12.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:09564jfSan_Rafael_Bulacan_Maasim_River_Diliman_Paddy_Vegetable_Fields_Roadsfvf_12.JPG", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Syzygium samarangense in Barangays Diliman I , and Diliman II , San Rafael , Bulacan Province along the Gulod, Maguinao-Diliman I-Diliman II, San Rafael, Bulacan Farm to Market Road.", + "date_prise_de_vue": "2016-02-26 16:11:56", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:09592jfSan Rafael Bulacan Syzygium samarangense Diliman Paddy Vegetable Fields Roadsfvf 07.JPG", + "auteur": "Judgefloro", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/b1/09592jfSan_Rafael_Bulacan_Syzygium_samarangense_Diliman_Paddy_Vegetable_Fields_Roadsfvf_07.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:09592jfSan_Rafael_Bulacan_Syzygium_samarangense_Diliman_Paddy_Vegetable_Fields_Roadsfvf_07.JPG", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Syzygium samarangense (in Barangays Diliman I , and Diliman II , San Rafael , Bulacan Province surrounded by Paddy fields of Diliman I and Diliman II, San Rafael, Bulacan from along the Gulod, Maguinao-Diliman I-Diliman ", + "date_prise_de_vue": "2016-02-26 16:16:24", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Syzygium samarangense (Rose apple) tree in RDA, Bogra 02.jpg", + "auteur": "Afifa Afrin", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/32/Syzygium_samarangense_%28Rose_apple%29_tree_in_RDA%2C_Bogra_02.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_(Rose_apple)_tree_in_RDA,_Bogra_02.jpg", + "largeur": 3456, + "hauteur": 4608, + "mime": "image/jpeg", + "description": "Syzygium samarangense (Rose apple) tree in RDA, Bogra", + "date_prise_de_vue": "2016-10-29", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Syzygium samarangense (jamalac ou jambose).jpg", + "auteur": "Filo gèn'", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/a/aa/Syzygium_samarangense_%28jamalac_ou_jambose%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_(jamalac_ou_jambose).jpg", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Syzygium samarangense:Wax jambu, Bell fruit", + "date_prise_de_vue": "2017-06-13 17:48:26", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Syzygium samarangense 16zz.jpg", + "auteur": "Photo by David J. Stang", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/6e/Syzygium_samarangense_16zz.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_16zz.jpg", + "largeur": 2544, + "hauteur": 1696, + "mime": "image/jpeg", + "description": "Location taken: Fairchild Tropical Botanic Garden, Miami, FL USA. Names: Syzygium samarangense (Blume) Merr. & L.M.Perry, Ambake (As Eugenia Formosa), Amrool, Cajuil De Solimán (Dominican Rep), Cajuil De Surinam, Cas", + "date_prise_de_vue": "2007-02-15", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Syzygium samarangense 19zz.jpg", + "auteur": "Photo by David J. Stang", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/39/Syzygium_samarangense_19zz.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Syzygium_samarangense_19zz.jpg", + "largeur": 2544, + "hauteur": 1696, + "mime": "image/jpeg", + "description": "Location taken: Fairchild Tropical Botanic Garden, Miami, FL USA. Names: Syzygium samarangense (Blume) Merr. & L.M.Perry, Ambake (As Eugenia Formosa), Amrool, Cajuil De Solimán (Dominican Rep), Cajuil De Surinam, Cas", + "date_prise_de_vue": "2007-02-15", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [ + { + "titre": "File:Wax apple1.jpg", + "auteur": null, + "licence_libelle": "CC BY 2.5", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/0c/Wax_apple1.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Wax_apple1.jpg", + "largeur": 1024, + "hauteur": 768, + "mime": "image/jpeg", + "description": null, + "date_prise_de_vue": null, + "raison": "licence à attribution mais auteur introuvable dans les métadonnées" + } + ] + }, + { + "id": "mansiniye", + "categorie": "plante_dangereuse", + "taxon": "Hippomane mancinella", + "candidats": [ + { + "titre": "File:Hippomane mancinella-Hocquart 1821.jpeg", + "auteur": "M. Hocquart", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/17/Hippomane_mancinella-Hocquart_1821.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Hocquart_1821.jpeg", + "largeur": 363, + "hauteur": 500, + "mime": "image/jpeg", + "description": "Hippomane mancinella illustration", + "date_prise_de_vue": "1821", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Hyacinthus orientalis and Hippomane mancinella.gif", + "auteur": "\"The Universal Herbal\" by Thomas Green (published 1816–20)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/09/Hyacinthus_orientalis_and_Hippomane_mancinella.gif", + "url_description": "https://commons.wikimedia.org/wiki/File:Hyacinthus_orientalis_and_Hippomane_mancinella.gif", + "largeur": 317, + "hauteur": 252, + "mime": "image/gif", + "description": "Hyacinthus orientalis and Hippomane mancinella", + "date_prise_de_vue": "1816–20", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Hippomane mancinella-Jacquin.jpeg", + "auteur": "Nicolás Joseph Jacquin", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/6d/Hippomane_mancinella-Jacquin.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Hippomane_mancinella-Jacquin.jpeg", + "largeur": 500, + "hauteur": 753, + "mime": "image/jpeg", + "description": "Hippomane mancinella", + "date_prise_de_vue": "1780", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Galapagos plants II 29.jpg", + "auteur": "Klaus Schönitzer", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/b1/Galapagos_plants_II_29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Galapagos_plants_II_29.jpg", + "largeur": 1500, + "hauteur": 2200, + "mime": "image/jpeg", + "description": "Drawings an descriptions of plants common on Galapagos. Complete scan of the book \" Galapagos plants \" by Klaus Schönitzer (Contribution No. 172 of the Charles Darwin Foundation; printed in Quito, Ecuador; 50 pages) Scan", + "date_prise_de_vue": "original 1975; Scanned Nov/Dez. 2008", + "licence": "CC-BY-SA-3.0", + "licence_url": "http://creativecommons.org/licenses/by-sa/3.0/", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Mancenillier1.JPG", + "auteur": "Mica", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/e1/Mancenillier1.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Mancenillier1.JPG", + "largeur": 1536, + "hauteur": 2048, + "mime": "image/jpeg", + "description": "Manchineel tree", + "date_prise_de_vue": null, + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Mancenillier2.JPG", + "auteur": "Mica", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Mancenillier2.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Mancenillier2.JPG", + "largeur": 1536, + "hauteur": 2048, + "mime": "image/jpeg", + "description": "Manchineel tree", + "date_prise_de_vue": null, + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Hippomane mancinella (fruit).jpg", + "auteur": "Hans Hillewaert", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/9/92/Hippomane_mancinella_%28fruit%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Hippomane_mancinella_(fruit).jpg", + "largeur": 3458, + "hauteur": 2592, + "mime": "image/jpeg", + "description": "Manchineel fruit and foliage at Cabo Blanca, Nicoya Peninsula, Costa Rica.", + "date_prise_de_vue": "2009-07-30", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Hippomane mancenilla port.JPG", + "auteur": "Pancrat", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/1c/Hippomane_mancenilla_port.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Hippomane_mancenilla_port.JPG", + "largeur": 1600, + "hauteur": 1200, + "mime": "image/jpeg", + "description": "Hippomane mancinella", + "date_prise_de_vue": null, + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:T. Green, The universal herbal Wellcome L0025496.jpg", + "auteur": "https://wellcomeimages.org/indexplus/obf_images/a5/e8/28f318cc920dfe442947fdfbae01.jpg Gallery: https://wellcomeimages.org/indexplus/image/L0025496.html Wellcome Collection gallery (2018-04-03): https://wellcomecollection.org/works/ejcjh8z6 CC-BY-4.0", + "licence_libelle": "CC BY 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/fc/T._Green%2C_The_universal_herbal_Wellcome_L0025496.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:T._Green,_The_universal_herbal_Wellcome_L0025496.jpg", + "largeur": 1568, + "hauteur": 1242, + "mime": "image/jpeg", + "description": "Hyacinthus orientalis and Hippomane mancinella. Rare Books", + "date_prise_de_vue": null, + "licence": "CC-BY-4.0", + "licence_url": "https://creativecommons.org/licenses/by/4.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Hippomane mancinella Costa Rica.jpg", + "auteur": "Gabriele Kothe-Heinrich", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/69/Hippomane_mancinella_Costa_Rica.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Hippomane_mancinella_Costa_Rica.jpg", + "largeur": 1200, + "hauteur": 900, + "mime": "image/jpeg", + "description": "Hippomane mancinella , manchineel tree. - Costa Rica, Manuel Antonio National Park, at beach.", + "date_prise_de_vue": "2014-12-24", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [ + { + "titre": "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", + "auteur": "Nuttall, Thomas, 1786-1859; Michaux, François-André, 1770-1855", + "licence_libelle": "No restrictions", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/b5/The_North_American_sylva%2C_or%2C_A_description_of_the_forest_trees_of_the_United_States%2C_Canada%2C_and_Nova_Scotia%2C_not_described_in_the_work_of_F._Andrew_Michaux_%28microform%29_-_and_containing_all_the_%2820632692415%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/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", + "largeur": 2218, + "hauteur": 3514, + "mime": "image/jpeg", + "description": "Title : 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 forest trees disc", + "date_prise_de_vue": "1849", + "raison": "licence non reconnue comme libre : No restrictions" + } + ] + }, + { + "id": "ake", + "categorie": "plante_dangereuse", + "taxon": "Blighia sapida", + "candidats": [ + { + "titre": "File:Ackee 001.jpg", + "auteur": "Jerome Walker", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/cf/Ackee_001.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Ackee_001.jpg", + "largeur": 2848, + "hauteur": 2136, + "mime": "image/jpeg", + "description": "Photo of closed Ackee ( Blighia sapida ) fruit on tree", + "date_prise_de_vue": "2005-10-21", + "licence": "CC-BY-SA-3.0", + "licence_url": "http://creativecommons.org/licenses/by-sa/3.0/", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Walter Hood Fitch03.JPG", + "auteur": "Walter Hood Fitch", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/19/Walter_Hood_Fitch03.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Walter_Hood_Fitch03.JPG", + "largeur": 1194, + "hauteur": 1732, + "mime": "image/jpeg", + "description": "Guava, Mango, Mangosteen, Lychee, Pistachio, Avocado Pear, Durian, from \"A History of the Vegetable Kingdom\" by William Rhind (published in London by Blackie & Son, 1874). Walter Hood Fitch supplied most of the illus", + "date_prise_de_vue": "1874", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Owoce Aka.jpg", + "auteur": "Agnieszka Kwiecień ( Nova )", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/15/Owoce_Aka.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Owoce_Aka.jpg", + "largeur": 1860, + "hauteur": 1860, + "mime": "image/jpeg", + "description": "Ackee - the fruit of Blighia sapida .", + "date_prise_de_vue": "2013-05-11", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Flore médicale des Antilles, ou, Traité des plantes usuelles (10559212793).jpg", + "auteur": "Descourtilz, J. Theodore.; Descourtilz, M. E.; Pichard.", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/d7/Flore_m%C3%A9dicale_des_Antilles%2C_ou%2C_Trait%C3%A9_des_plantes_usuelles_%2810559212793%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Flore_m%C3%A9dicale_des_Antilles,_ou,_Trait%C3%A9_des_plantes_usuelles_(10559212793).jpg", + "largeur": 1557, + "hauteur": 2889, + "mime": "image/jpeg", + "description": "j4o'/'W. PL Jâû", + "date_prise_de_vue": "1829", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Pomological Watercolor POM00007429.jpg", + "auteur": "Newton, Amanda Almira, ca. 1860-1943", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/a/a4/Pomological_Watercolor_POM00007429.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Pomological_Watercolor_POM00007429.jpg", + "largeur": 2715, + "hauteur": 4000, + "mime": "image/jpeg", + "description": "Image of the Savoury variety of akee (fruit) (scientific name: Blighia sapida ), with this specimen originating in West Indies. Source: U.S. Department of Agriculture Pomological Watercolor Collection. Rare and Special C", + "date_prise_de_vue": "1924", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Pommier d’aki à Taneka, Commune de Copargo, département de la Donga au Bénin 01.jpg", + "auteur": "Saliousoft", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/29/Pommier_d%E2%80%99aki_%C3%A0_Taneka%2C_Commune_de_Copargo%2C_d%C3%A9partement_de_la_Donga_au_B%C3%A9nin_01.jpg", + "url_description": "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", + "largeur": 9216, + "hauteur": 6912, + "mime": "image/jpeg", + "description": "Pommier d’aki à Taneka, Commune de Copargo, département de la Donga au Bénin", + "date_prise_de_vue": "2023-03-17 13:10:13", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Blighia sapida3.jpg", + "auteur": "DouglasGoldman", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/d8/Blighia_sapida3.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Blighia_sapida3.jpg", + "largeur": 1814, + "hauteur": 2710, + "mime": "image/jpeg", + "description": "Blighia sapida", + "date_prise_de_vue": "2025-12-06 15:17:40", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Blighia sapida5.jpg", + "auteur": "DouglasGoldman", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/4b/Blighia_sapida5.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Blighia_sapida5.jpg", + "largeur": 1814, + "hauteur": 2710, + "mime": "image/jpeg", + "description": "Blighia sapida", + "date_prise_de_vue": "2025-12-06 15:19:45", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Blighia sapida8.jpg", + "auteur": "DouglasGoldman", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/9/94/Blighia_sapida8.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Blighia_sapida8.jpg", + "largeur": 2710, + "hauteur": 1814, + "mime": "image/jpeg", + "description": "Blighia sapida", + "date_prise_de_vue": "2025-12-06 15:22:36", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Blighia sapida10.jpg", + "auteur": "DouglasGoldman", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/2/2b/Blighia_sapida10.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Blighia_sapida10.jpg", + "largeur": 2710, + "hauteur": 1814, + "mime": "image/jpeg", + "description": "Blighia sapida", + "date_prise_de_vue": "2025-12-06 15:28:16", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [] + }, + { + "id": "pom-kajou", + "categorie": "plante_dangereuse", + "taxon": "Anacardium occidentale", + "candidats": [ + { + "titre": "File:Anacardium occidentale - Köhler–s Medizinal-Pflanzen-010.jpg", + "auteur": "Franz Eugen Köhler, Köhler's Medizinal-Pflanzen", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/0/0e/Anacardium_occidentale_-_K%C3%B6hler%E2%80%93s_Medizinal-Pflanzen-010.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_-_K%C3%B6hler%E2%80%93s_Medizinal-Pflanzen-010.jpg", + "largeur": 425, + "hauteur": 589, + "mime": "image/jpeg", + "description": "Kaschu. A Blühende Pflanze. 1 Blüte vergrössert ; 2 Stempel und Staubgefässe; 3 Dasselbe im Längsschnitt; 4 Frucht mit dem vergrösserten und reifen Fruchtstiel; 5 Frucht im Längsschnitt; 6 Frucht im Querschnitt.", + "date_prise_de_vue": "1897", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Cashew2-flower.JPG", + "auteur": "Aruna at Malayalam Wikipedia", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/b/bf/Cashew2-flower.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Cashew2-flower.JPG", + "largeur": 1024, + "hauteur": 768, + "mime": "image/jpeg", + "description": "Cashew flower", + "date_prise_de_vue": "2007-12-07", + "licence": "CC-BY-SA-3.0", + "licence_url": "http://creativecommons.org/licenses/by-sa/3.0/", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Cashew apples.jpg", + "auteur": "Abhishek Jacob", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/64/Cashew_apples.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Cashew_apples.jpg", + "largeur": 2534, + "hauteur": 1982, + "mime": "image/jpeg", + "description": "Ripe cashew apples", + "date_prise_de_vue": "2009-04-14", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Cashew flower fruit seed.JPG", + "auteur": "ସୁରଥ କୁମାର ପାଢ଼ୀ", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/38/Cashew_flower_fruit_seed.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Cashew_flower_fruit_seed.JPG", + "largeur": 4000, + "hauteur": 3000, + "mime": "image/jpeg", + "description": "Indian cashew flower fruit seed", + "date_prise_de_vue": "2010-01-02", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Anacardium occidentale Thailand 2013-05-03wb.JPG", + "auteur": "Strobilomyces", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/de/Anacardium_occidentale_Thailand_2013-05-03wb.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_Thailand_2013-05-03wb.JPG", + "largeur": 2816, + "hauteur": 2112, + "mime": "image/jpeg", + "description": "Cashew (Anacardium occidentale) fruit and nut at a petrol station not far from Chiang Mai, Thailand", + "date_prise_de_vue": "2013-05-03 12:57", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Cashew 4334.JPG", + "auteur": "Primejyothi", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/ce/Cashew_4334.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Cashew_4334.JPG", + "largeur": 3888, + "hauteur": 2592, + "mime": "image/jpeg", + "description": "Cashew", + "date_prise_de_vue": "2012-03-17 11:39:47", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Cashew 4335.JPG", + "auteur": "Primejyothi", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/f2/Cashew_4335.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Cashew_4335.JPG", + "largeur": 2592, + "hauteur": 3888, + "mime": "image/jpeg", + "description": "Cashew", + "date_prise_de_vue": "2012-03-17 11:40:33", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Anacardium occidentale 01.JPG", + "auteur": "Vinayaraj", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5f/Anacardium_occidentale_01.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_01.JPG", + "largeur": 2580, + "hauteur": 3588, + "mime": "image/jpeg", + "description": "Anacardium occidentale in the north of Peravoor, Kerala, India", + "date_prise_de_vue": "2013-02-20 17:27:44", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Anacardium occidentale 08.JPG", + "auteur": "Vinayaraj", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/60/Anacardium_occidentale_08.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Anacardium_occidentale_08.JPG", + "largeur": 2532, + "hauteur": 3648, + "mime": "image/jpeg", + "description": "Anacardium occidentale in the north of Peravoor, Kerala, India", + "date_prise_de_vue": "2013-02-20 17:45:02", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Fleurs et noix de cajou.jpg", + "auteur": "Xof", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/7d/Fleurs_et_noix_de_cajou.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Fleurs_et_noix_de_cajou.jpg", + "largeur": 4608, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Flowers of and fruit of a cashew tree", + "date_prise_de_vue": "2016-03-30 09:35:38", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [] + }, + { + "id": "medisinye", + "categorie": "plante_dangereuse", + "taxon": "Jatropha curcas", + "candidats": [ + { + "titre": "File:Jatropha curcas Blanco2.384.jpg", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/5/5d/Jatropha_curcas_Blanco2.384.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384.jpg", + "largeur": 1411, + "hauteur": 2061, + "mime": "image/jpeg", + "description": "Jatropha curcas Plate from book", + "date_prise_de_vue": "between 1880 and 1883 date QS:P,+1880-00-00T00:00:00Z/8,P1319,+1880-00-00T00:00:00Z/9,P1326,+1883-00-00T00:00:00Z/9", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Jatropha curcas Blanco2.384-cropped.jpg", + "auteur": "Francisco Manuel Blanco (O.S.A.)", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/35/Jatropha_curcas_Blanco2.384-cropped.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Jatropha_curcas_Blanco2.384-cropped.jpg", + "largeur": 1300, + "hauteur": 1870, + "mime": "image/jpeg", + "description": "Jatropha curcas Plate from book", + "date_prise_de_vue": "between 1880 and 1883 date QS:P,+1880-00-00T00:00:00Z/8,P1319,+1880-00-00T00:00:00Z/9,P1326,+1883-00-00T00:00:00Z/9", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Georg Forster - Purgiernuss.jpeg", + "auteur": "Georg Forster", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/73/Georg_Forster_-_Purgiernuss.jpeg", + "url_description": "https://commons.wikimedia.org/wiki/File:Georg_Forster_-_Purgiernuss.jpeg", + "largeur": 1836, + "hauteur": 2658, + "mime": "image/jpeg", + "description": null, + "date_prise_de_vue": null, + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Jatropha curcas 11 (4350031767).jpg", + "auteur": "Ton Rulkens from Mozambique", + "licence_libelle": "CC BY-SA 2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/74/Jatropha_curcas_11_%284350031767%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Jatropha_curcas_11_(4350031767).jpg", + "largeur": 768, + "hauteur": 1024, + "mime": "image/jpeg", + "description": "An \"albino\" seedling of Jatropha curcas in Buzi district of Mozambique", + "date_prise_de_vue": "2010-02-09 08:48", + "licence": "CC-BY-SA-2.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/2.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Starr-120620-9733-Jatropha curcas-seedlings in duff-Kula Agriculture Park-Maui (25185489735).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/71/Starr-120620-9733-Jatropha_curcas-seedlings_in_duff-Kula_Agriculture_Park-Maui_%2825185489735%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-120620-9733-Jatropha_curcas-seedlings_in_duff-Kula_Agriculture_Park-Maui_(25185489735).jpg", + "largeur": 3456, + "hauteur": 2592, + "mime": "image/jpeg", + "description": "Jatropha curcas (Physic nut, Barbados nut) Seedlings in duff at Kula Agriculture Park, Maui, Hawaii. June 20, 2012 #120620-9733 Image Use Policy", + "date_prise_de_vue": "2012-06-20 12:17", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-120620-9735-Jatropha curcas-seedlings in debris near parent plantings-Kula Agriculture Park-Maui (24558649453).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/a/a0/Starr-120620-9735-Jatropha_curcas-seedlings_in_debris_near_parent_plantings-Kula_Agriculture_Park-Maui_%2824558649453%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-120620-9735-Jatropha_curcas-seedlings_in_debris_near_parent_plantings-Kula_Agriculture_Park-Maui_(24558649453).jpg", + "largeur": 2592, + "hauteur": 3456, + "mime": "image/jpeg", + "description": "Jatropha curcas (Physic nut, Barbados nut) Seedlings in debris near parent plantings at Kula Agriculture Park, Maui, Hawaii. June 20, 2012 #120620-9735 Image Use Policy", + "date_prise_de_vue": "2012-06-20 12:22", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-120620-9736-Jatropha curcas-seedlings in debris near parent plantings-Kula Agriculture Park-Maui (25159146496).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/9/97/Starr-120620-9736-Jatropha_curcas-seedlings_in_debris_near_parent_plantings-Kula_Agriculture_Park-Maui_%2825159146496%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-120620-9736-Jatropha_curcas-seedlings_in_debris_near_parent_plantings-Kula_Agriculture_Park-Maui_(25159146496).jpg", + "largeur": 3456, + "hauteur": 2592, + "mime": "image/jpeg", + "description": "Jatropha curcas (Physic nut, Barbados nut) Seedlings in debris near parent plantings at Kula Agriculture Park, Maui, Hawaii. June 20, 2012 #120620-9736 Image Use Policy", + "date_prise_de_vue": "2012-06-20 12:23", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-120620-7537-Jatropha curcas-seedling in duff-Kula Agriculture Park-Maui (24850192310).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/13/Starr-120620-7537-Jatropha_curcas-seedling_in_duff-Kula_Agriculture_Park-Maui_%2824850192310%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-120620-7537-Jatropha_curcas-seedling_in_duff-Kula_Agriculture_Park-Maui_(24850192310).jpg", + "largeur": 2736, + "hauteur": 3648, + "mime": "image/jpeg", + "description": "Jatropha curcas (Physic nut, Barbados nut) Seedling in duff at Kula Agriculture Park, Maui, Hawaii. June 20, 2012 #120620-7537 Image Use Policy", + "date_prise_de_vue": "2012-06-20 12:02", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-120620-7538-Jatropha curcas-biofuel trial plantings-Kula Agriculture Park-Maui (25119515196).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/4/43/Starr-120620-7538-Jatropha_curcas-biofuel_trial_plantings-Kula_Agriculture_Park-Maui_%2825119515196%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-120620-7538-Jatropha_curcas-biofuel_trial_plantings-Kula_Agriculture_Park-Maui_(25119515196).jpg", + "largeur": 3648, + "hauteur": 2736, + "mime": "image/jpeg", + "description": "Jatropha curcas (Physic nut, Barbados nut) Biofuel trial plantings at Kula Agriculture Park, Maui, Hawaii. June 20, 2012 #120620-7538 Image Use Policy", + "date_prise_de_vue": "2012-06-20 12:02", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr-120620-7541-Jatropha curcas-seedling-Kula Agriculture Park-Maui (24519017633).jpg", + "auteur": "Forest and Kim Starr", + "licence_libelle": "CC BY 3.0 us", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/16/Starr-120620-7541-Jatropha_curcas-seedling-Kula_Agriculture_Park-Maui_%2824519017633%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr-120620-7541-Jatropha_curcas-seedling-Kula_Agriculture_Park-Maui_(24519017633).jpg", + "largeur": 2736, + "hauteur": 3648, + "mime": "image/jpeg", + "description": "Jatropha curcas (Physic nut, Barbados nut) Seedling at Kula Agriculture Park, Maui, Hawaii. June 20, 2012 #120620-7541 Image Use Policy", + "date_prise_de_vue": "2012-06-20 12:04", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0/us/deed.en", + "attribution_requise": true, + "partage_identique": false + } + ], + "ecartes": [ + { + "titre": "File:Jatropha curcas1 henning.jpg", + "auteur": null, + "licence_libelle": "CC BY-SA 2.5", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/c/c6/Jatropha_curcas1_henning.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Jatropha_curcas1_henning.jpg", + "largeur": 500, + "hauteur": 636, + "mime": "image/jpeg", + "description": null, + "date_prise_de_vue": null, + "raison": "licence à attribution mais auteur introuvable dans les métadonnées" + } + ] + }, + { + "id": "lorye-jonn", + "categorie": "plante_dangereuse", + "taxon": "Cascabela thevetia", + "candidats": [ + { + "titre": "File:Thevetia peruviana1.jpg", + "auteur": "No machine-readable author provided. Hans B.~commonswiki assumed (based on copyright claims).", + "licence_libelle": "Public domain", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/f0/Thevetia_peruviana1.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Thevetia_peruviana1.jpg", + "largeur": 2592, + "hauteur": 1944, + "mime": "image/jpeg", + "description": "Thevetia peruviana , picture taken at the Passiflorahoeve in Harskamp, The Netherlands", + "date_prise_de_vue": "14 July 2006 (according to Exif data)", + "licence": "PD", + "licence_url": null, + "attribution_requise": false, + "partage_identique": false + }, + { + "titre": "File:Yellow Oleander (Thevetia peruviana) leaves & flowers in Kolkata W IMG 8008.jpg", + "auteur": "J.M.Garg", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/8/87/Yellow_Oleander_%28Thevetia_peruviana%29_leaves_%26_flowers_in_Kolkata_W_IMG_8008.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Yellow_Oleander_(Thevetia_peruviana)_leaves_%26_flowers_in_Kolkata_W_IMG_8008.jpg", + "largeur": 619, + "hauteur": 600, + "mime": "image/jpeg", + "description": "Yellow Oleander Thevetia peruviana in Kolkata , West Bengal , India .", + "date_prise_de_vue": "02.06.07", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Starr 060916-8881 Thevetia peruviana.jpg", + "auteur": "Forest & Kim Starr", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/dc/Starr_060916-8881_Thevetia_peruviana.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_060916-8881_Thevetia_peruviana.jpg", + "largeur": 2592, + "hauteur": 1944, + "mime": "image/jpeg", + "description": "Thevetia peruviana (habit). Location: Maui, Kula", + "date_prise_de_vue": "2006-09-16", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Starr 080609-7918 Thevetia peruviana.jpg", + "auteur": "Forest & Kim Starr", + "licence_libelle": "CC BY 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/36/Starr_080609-7918_Thevetia_peruviana.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Starr_080609-7918_Thevetia_peruviana.jpg", + "largeur": 2112, + "hauteur": 2816, + "mime": "image/jpeg", + "description": "Thevetia peruviana (leaves and flowers). Location: Midway Atoll, Ave Maria Sand Island", + "date_prise_de_vue": "2008-06-09", + "licence": "CC-BY-3.0", + "licence_url": "https://creativecommons.org/licenses/by/3.0", + "attribution_requise": true, + "partage_identique": false + }, + { + "titre": "File:Thevetia peruviana plant.jpg", + "auteur": "Vinayaraj", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/f/fb/Thevetia_peruviana_plant.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_plant.jpg", + "largeur": 2556, + "hauteur": 3648, + "mime": "image/jpeg", + "description": "മഞ്ഞരളി.", + "date_prise_de_vue": "2012-03-03", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Tarrafal-Thevetia peruviana (2).jpg", + "auteur": "Ji-Elle", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/1/1d/Tarrafal-Thevetia_peruviana_%282%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Tarrafal-Thevetia_peruviana_(2).jpg", + "largeur": 3648, + "hauteur": 2736, + "mime": "image/jpeg", + "description": "Thevetia peruviana à Tarrafal (île de Santiago, Cap-Vert)", + "date_prise_de_vue": "2012-02-19", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Cascabela thevetia 10.JPG", + "auteur": "Vinayaraj", + "licence_libelle": "CC BY-SA 3.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/d/db/Cascabela_thevetia_10.JPG", + "url_description": "https://commons.wikimedia.org/wiki/File:Cascabela_thevetia_10.JPG", + "largeur": 3648, + "hauteur": 2736, + "mime": "image/jpeg", + "description": "Cascabela thevetia", + "date_prise_de_vue": "2012-10-23 14:29:12", + "licence": "CC-BY-SA-3.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/3.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Thevetia peruviana 'Alba' (338607342).jpg", + "auteur": "Dinesh Valke from Thane, India", + "licence_libelle": "CC BY-SA 2.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/3/33/Thevetia_peruviana_%27Alba%27_%28338607342%29.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_%27Alba%27_(338607342).jpg", + "largeur": 2816, + "hauteur": 2112, + "mime": "image/jpeg", + "description": "Common name : Mexican oleander, Yellow Oleander, Utonglei (Manipuri) Botanical name : Thevetia peruviana (syn. Thevetia nerifolia , syn. Cascabela thevetia , syn. Cascabela nerifolia , syn. Cerbera peruviana ) - [ (thev-", + "date_prise_de_vue": "2006-12-30 15:22", + "licence": "CC-BY-SA-2.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/2.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Thevetia peruviana 15zz.jpg", + "auteur": "Photo by David J. Stang", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/7/7a/Thevetia_peruviana_15zz.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_15zz.jpg", + "largeur": 3504, + "hauteur": 2336, + "mime": "image/jpeg", + "description": "Location taken: Else Kientzler Botanical Garden, Sarchi Norte, Costa Rica. Names: Cascabela thevetia (L.) H. Lippold, Caballón, Cabalonga, Lucky Nut, Lucky-nut, Luckynut, Milk tree, Yellow Oleande Classification: Plantae", + "date_prise_de_vue": "2008-06-04", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + }, + { + "titre": "File:Thevetia peruviana 28zz.jpg", + "auteur": "Photo by David J. Stang", + "licence_libelle": "CC BY-SA 4.0", + "url_fichier": "https://upload.wikimedia.org/wikipedia/commons/6/69/Thevetia_peruviana_28zz.jpg", + "url_description": "https://commons.wikimedia.org/wiki/File:Thevetia_peruviana_28zz.jpg", + "largeur": 3504, + "hauteur": 2336, + "mime": "image/jpeg", + "description": "Location taken: Else Kientzler Botanical Garden, Sarchi Norte, Costa Rica. Names: Cascabela thevetia (L.) H. Lippold, Caballón, Cabalonga, Lucky Nut, Lucky-nut, Luckynut, Milk tree, Yellow Oleande Classification: Plantae", + "date_prise_de_vue": "2008-06-05", + "licence": "CC-BY-SA-4.0", + "licence_url": "https://creativecommons.org/licenses/by-sa/4.0", + "attribution_requise": true, + "partage_identique": true + } + ], + "ecartes": [] + } + ] +} diff --git a/tools/data/out/taxa-verified.json b/tools/data/out/taxa-verified.json new file mode 100644 index 0000000..f3ab773 --- /dev/null +++ b/tools/data/out/taxa-verified.json @@ -0,0 +1,343 @@ +{ + "genere_le": "2026-07-27T03:46:04.075Z", + "resultats": [ + { + "id": "kowosol", + "categorie": "fruit", + "graine": { + "scientifique": "Annona muricata", + "famille": "Annonaceae" + }, + "wikidata": { + "qid": "Q1709343", + "famille": "Annonaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 5407273, + "scientificName": "Annona muricata L.", + "canonicalName": "Annona muricata", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 97, + "famille": "Annonaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "kenet", + "categorie": "fruit", + "graine": { + "scientifique": "Melicoccus bijugatus", + "famille": "Sapindaceae" + }, + "wikidata": { + "qid": "Q279728", + "famille": "Sapindaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 3189990, + "scientificName": "Melicoccus bijugatus Jacq.", + "canonicalName": "Melicoccus bijugatus", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 99, + "famille": "Sapindaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "gouyav", + "categorie": "fruit", + "graine": { + "scientifique": "Psidium guajava", + "famille": "Myrtaceae" + }, + "wikidata": { + "qid": "Q166843", + "famille": "Myrtaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 5420380, + "scientificName": "Psidium guajava L.", + "canonicalName": "Psidium guajava", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 99, + "famille": "Myrtaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "pom-site", + "categorie": "fruit", + "graine": { + "scientifique": "Spondias dulcis", + "famille": "Anacardiaceae" + }, + "wikidata": { + "qid": "Q500383", + "famille": "Anacardiaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 3190595, + "scientificName": "Spondias dulcis Parkinson", + "canonicalName": "Spondias dulcis", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 97, + "famille": "Anacardiaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "zikak", + "categorie": "fruit", + "graine": { + "scientifique": "Chrysobalanus icaco", + "famille": "Chrysobalanaceae" + }, + "wikidata": { + "qid": "Q577669", + "famille": "Chrysobalanaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 2985082, + "scientificName": "Chrysobalanus icaco L.", + "canonicalName": "Chrysobalanus icaco", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 99, + "famille": "Chrysobalanaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "pom-kannel", + "categorie": "fruit", + "graine": { + "scientifique": "Annona squamosa", + "famille": "Annonaceae" + }, + "wikidata": { + "qid": "Q275620", + "famille": "Annonaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 5407099, + "scientificName": "Annona squamosa L.", + "canonicalName": "Annona squamosa", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 97, + "famille": "Annonaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "fwiyapen", + "categorie": "fruit", + "graine": { + "scientifique": "Artocarpus altilis", + "famille": "Moraceae" + }, + "wikidata": { + "qid": "Q14677", + "famille": "Moraceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 2984573, + "scientificName": "Artocarpus altilis (Parkinson) Fosberg", + "canonicalName": "Artocarpus altilis", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 97, + "famille": "Moraceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "pom-dlo", + "categorie": "fruit", + "graine": { + "scientifique": "Syzygium samarangense", + "famille": "Myrtaceae" + }, + "wikidata": { + "qid": "Q11643111", + "famille": "Myrtaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 3183180, + "scientificName": "Syzygium samarangense (Blume) Merr. & L.M.Perry", + "canonicalName": "Syzygium samarangense", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 99, + "famille": "Myrtaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "mansiniye", + "categorie": "plante_dangereuse", + "graine": { + "scientifique": "Hippomane mancinella", + "famille": "Euphorbiaceae" + }, + "wikidata": { + "qid": "Q636480", + "famille": "Euphorbiaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 3063705, + "scientificName": "Hippomane mancinella L.", + "canonicalName": "Hippomane mancinella", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 99, + "famille": "Euphorbiaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "ake", + "categorie": "plante_dangereuse", + "graine": { + "scientifique": "Blighia sapida", + "famille": "Sapindaceae" + }, + "wikidata": { + "qid": "Q417145", + "famille": "Sapindaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 3189955, + "scientificName": "Blighia sapida K.D.Koenig", + "canonicalName": "Blighia sapida", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 99, + "famille": "Sapindaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "pom-kajou", + "categorie": "plante_dangereuse", + "graine": { + "scientifique": "Anacardium occidentale", + "famille": "Anacardiaceae" + }, + "wikidata": { + "qid": "Q34007", + "famille": "Anacardiaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 5421368, + "scientificName": "Anacardium occidentale L.", + "canonicalName": "Anacardium occidentale", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 98, + "famille": "Anacardiaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "medisinye", + "categorie": "plante_dangereuse", + "graine": { + "scientifique": "Jatropha curcas", + "famille": "Euphorbiaceae" + }, + "wikidata": { + "qid": "Q74644", + "famille": "Euphorbiaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 3072953, + "scientificName": "Jatropha curcas L.", + "canonicalName": "Jatropha curcas", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 98, + "famille": "Euphorbiaceae", + "accepte": null + }, + "ecarts": [] + }, + { + "id": "lorye-jonn", + "categorie": "plante_dangereuse", + "graine": { + "scientifique": "Cascabela thevetia", + "famille": "Apocynaceae" + }, + "wikidata": { + "qid": "Q10694475", + "famille": "Apocynaceae", + "rang": "espèce" + }, + "wikidata_pistes": null, + "gbif": { + "usageKey": 3169652, + "scientificName": "Cascabela thevetia (L.) Lippold", + "canonicalName": "Cascabela thevetia", + "rank": "SPECIES", + "status": "ACCEPTED", + "matchType": "EXACT", + "confidence": 99, + "famille": "Apocynaceae", + "accepte": null + }, + "ecarts": [] + } + ] +} diff --git a/tools/data/test-porte.mjs b/tools/data/test-porte.mjs new file mode 100644 index 0000000..6736207 --- /dev/null +++ b/tools/data/test-porte.mjs @@ -0,0 +1,194 @@ +#!/usr/bin/env node +/** + * test-porte.mjs — prouve que la porte se ferme. + * + * Une règle de sécurité qu'on n'a jamais vue refuser quoi que ce soit n'est pas une règle, + * c'est une intention. Ce test fabrique les cas interdits par le brief et vérifie que + * `validate.mjs` les rejette bien avec un code de sortie non nul. + * + * Chaque cas correspond à une phrase du brief, citée en regard. + */ + +import { readFile, writeFile, mkdir, rm } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; +import { spawnSync } from 'node:child_process'; + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); +const BAC = join('tools', 'data', 'out', 'test-porte'); + +/** Applique une mutation à une copie profonde de l'entrée de référence. */ +const muter = (base, fn) => { + const c = structuredClone(base); + fn(c); + return c; +}; + +/** Un média de référence, valide et utilisable comme épreuve. */ +const mediaValide = (over = {}) => ({ + id: 'photo-temoin', + filiere: 'A', + type_media: 'photo', + vue: 'fruit_entier', + usages: ['epreuve'], + source: 'wikimedia_commons', + auteur: 'Témoin', + licence: 'CC-BY-SA-4.0', + licence_url: null, + url_fichier: 'https://upload.wikimedia.org/temoin.jpg', + url_description: 'https://commons.wikimedia.org/wiki/File:temoin.jpg', + largeur: 800, + hauteur: 600, + mime: 'image/jpeg', + description: null, + date_prise_de_vue: null, + attribution_requise: true, + partage_identique: true, + usage_non_commercial: false, + composite: false, + valide: true, + valide_par: 'porteur', + valide_le: '2026-07-27', + note_validation: null +}); + +const CAS = [ + { + nom: 'épreuve sur un média non validé', + regle: 'brief §2 — « Le build échoue si un média non validé est référencé par une épreuve. »', + muter: (e) => { + e.medias = [mediaValide({}), mediaValide()]; + e.medias[0].id = 'photo-non-validee'; + e.medias[0].valide = false; + e.medias[0].valide_par = null; + } + }, + { + nom: 'épreuve sur un asset généré (filière B)', + regle: "brief §10 — « Aucune épreuve d'identification ne s'appuie sur un asset IA. »", + muter: (e) => { + e.medias = [mediaValide()]; + e.medias[0].filiere = 'B'; + e.medias[0].type_media = 'image_generee'; + } + }, + { + nom: 'épreuve sur une planche botanique', + regle: "brief §2 — filière A = photographie réelle ; une gravure documente mais n'entraîne pas la reconnaissance du réel.", + muter: (e) => { + e.medias = [mediaValide()]; + e.medias[0].type_media = 'planche_botanique'; + } + }, + { + nom: 'épreuve portée par une plante dangereuse', + regle: 'brief §6 — « Pa touché : jamais chronométré, jamais scoré, jamais transformé en épreuve. »', + muter: (e) => { + e.categorie = 'plante_dangereuse'; + e.danger = { niveau: 'critique', resume: 'Ne jamais toucher ni manger ce fruit.' }; + delete e.saison_mois; + e.comestible = false; + e.medias = [mediaValide()]; + } + }, + { + nom: 'média à attribution sans auteur', + regle: 'brief §3 — « Récupérer auteur, licence, URL du fichier, URL de la page de description. »', + muter: (e) => { + e.medias = [mediaValide()]; + e.medias[0].auteur = null; + } + }, + { + nom: 'compositing sur un média en partage à l’identique', + regle: "ADR 0001 — le SA contamine les dérivés, le NC est incompatible avec le SA : aucun compositing.", + muter: (e) => { + e.medias = [mediaValide()]; + e.medias[0].composite = true; + } + }, + { + nom: 'entrée publiée avec une seule photo validée', + regle: 'brief §8 — « ≥ 2 photos Commons par fruit avec auteur, licence et URL. »', + muter: (e) => { + e.medias = [mediaValide()]; + e.orthographe = { norme: 'gwadloupeyen', statut: 'relu', relu_par: 'relecteur' }; + e.valide = true; + } + }, + { + nom: 'entrée publiée sans relecture kréyòl', + regle: "brief §5 — « L'orthographe kréyòl n'est pas de ton ressort. »", + muter: (e) => { + e.medias = [mediaValide(), muter(mediaValide(), (m) => (m.id = 'photo-temoin-2'))]; + e.valide = true; + } + }, + { + nom: 'validation anonyme', + regle: 'porte du projet — une validation sans nom n’engage personne.', + muter: (e) => { + e.medias = [mediaValide()]; + e.medias[0].valide_par = null; + } + } +]; + +/** Cas témoin : doit passer. Un test qui échoue toujours ne prouve rien non plus. */ +const TEMOIN = { + nom: 'TÉMOIN — entrée correcte, doit passer', + attendu: 0, + muter: (e) => { + e.medias = [mediaValide(), muter(mediaValide(), (m) => (m.id = 'photo-temoin-2'))]; + e.orthographe = { norme: 'gwadloupeyen', statut: 'relu', relu_par: 'relecteur' }; + e.valide = true; + } +}; + +async function jouer(cas, base, i) { + const dir = join(BAC, `cas-${i}`); + await mkdir(join(ROOT, dir), { recursive: true }); + await writeFile(join(ROOT, dir, `${base.id}.json`), JSON.stringify(muter(base, cas.muter), null, '\t')); + + const r = spawnSync(process.execPath, [join(ROOT, 'tools', 'data', 'validate.mjs')], { + cwd: ROOT, + env: { ...process.env, KI_FWI_DATA: dir }, + encoding: 'utf8' + }); + + const attendu = cas.attendu ?? 1; + const obtenu = r.status; + const ok = obtenu === attendu; + console.log(`${ok ? '✔' : '✘'} ${cas.nom}`); + if (cas.regle) console.log(` ${cas.regle}`); + if (!ok) { + console.log(` attendu code ${attendu}, obtenu ${obtenu}`); + console.log((r.stderr || r.stdout).split('\n').slice(-8).join('\n')); + } + return ok; +} + +async function main() { + const base = JSON.parse(await readFile(join(ROOT, 'src/lib/data/fruits/kowosol.json'), 'utf8')); + await rm(join(ROOT, BAC), { recursive: true, force: true }); + + console.log('\nTest de la porte de validation\n'); + const resultats = []; + resultats.push(await jouer(TEMOIN, base, 0)); + for (const [i, cas] of CAS.entries()) resultats.push(await jouer(cas, base, i + 1)); + + await rm(join(ROOT, BAC), { recursive: true, force: true }); + + const echecs = resultats.filter((r) => !r).length; + console.log(`\n${resultats.length - echecs}/${resultats.length} cas conformes.`); + if (echecs) { + console.error(`✘ ${echecs} cas non couvert(s) : la porte laisse passer ce qu'elle devrait refuser.`); + process.exit(1); + } + console.log('✔ La porte refuse tout ce que le brief interdit.'); +} + +main().catch((e) => { + console.error('✘', e.stack ?? e.message); + process.exit(1); +}); diff --git a/tools/data/validate.mjs b/tools/data/validate.mjs new file mode 100644 index 0000000..94e5f7e --- /dev/null +++ b/tools/data/validate.mjs @@ -0,0 +1,163 @@ +#!/usr/bin/env node +/** + * validate.mjs — LA PORTE. Ce script est la règle n°1 du projet écrite en code. + * + * Le brief §2 l'exige mot pour mot : « Le build échoue si un média non validé est + * référencé par une épreuve. Écris ce contrôle comme un script de build, pas comme + * une consigne. » Ce fichier est ce contrôle. + * + * Il vérifie deux couches : + * 1. la forme, contre fruits.schema.json (Ajv) ; + * 2. les règles que le schéma ne peut pas exprimer — filières, licences, sécurité. + * + * Sortie non nulle = build refusé. Aucune de ces règles ne se contourne par un flag. + */ + +import { readFile, readdir } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join, basename } from 'node:path'; +import Ajv2020 from 'ajv/dist/2020.js'; +import addFormats from 'ajv-formats'; + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); +/** Surchargeable pour les tests de la porte (tools/data/test-porte.mjs). */ +const DATA = process.env.KI_FWI_DATA ? join(ROOT, process.env.KI_FWI_DATA) : join(ROOT, 'src', 'lib', 'data', 'fruits'); + +/** Usages qui servent à identifier une espèce. Ce sont eux qui déclenchent la porte. */ +const USAGES_IDENTIFIANTS = new Set(['epreuve', 'indice']); + +const erreurs = []; +const alertes = []; +const err = (fichier, msg) => erreurs.push(`${fichier} — ${msg}`); +const warn = (fichier, msg) => alertes.push(`${fichier} — ${msg}`); + +async function main() { + const schema = JSON.parse(await readFile(join(ROOT, 'fruits.schema.json'), 'utf8')); + const ajv = new Ajv2020({ allErrors: true, strict: false }); + addFormats(ajv); + const valider = ajv.compile(schema); + + const fichiers = (await readdir(DATA)).filter((f) => f.endsWith('.json')).sort(); + if (!fichiers.length) { + console.error('✘ Aucune entrée dans src/lib/data/fruits/.'); + process.exit(1); + } + + const vus = new Map(); + const entrees = []; + let nbMedias = 0; + let nbMediasValides = 0; + let nbNC = 0; + + for (const f of fichiers) { + const brut = await readFile(join(DATA, f), 'utf8'); + let e; + try { + e = JSON.parse(brut); + } catch (ex) { + err(f, `JSON illisible : ${ex.message}`); + continue; + } + + // ── Couche 1 : la forme + if (!valider(e)) { + for (const d of valider.errors ?? []) err(f, `schéma : ${d.instancePath || '/'} ${d.message}`); + continue; + } + + // ── Couche 2 : les règles métier + if (e.id !== basename(f, '.json')) err(f, `id « ${e.id} » ≠ nom de fichier`); + if (vus.has(e.id)) err(f, `id « ${e.id} » déjà utilisé par ${vus.get(e.id)}`); + vus.set(e.id, f); + + const idsMedias = new Set(); + for (const m of e.medias) { + nbMedias++; + if (m.valide) nbMediasValides++; + if (m.usage_non_commercial) nbNC++; + + if (idsMedias.has(m.id)) err(f, `média « ${m.id} » en double`); + idsMedias.add(m.id); + + const identifiant = m.usages.some((u) => USAGES_IDENTIFIANTS.has(u)); + + // LA PORTE — brief §2 et §10. + if (identifiant) { + if (m.filiere !== 'A') + err(f, `média « ${m.id} » sert à identifier mais relève de la filière ${m.filiere} : une image générée n'enseigne pas le réel`); + if (m.type_media !== 'photo') + err(f, `média « ${m.id} » sert à identifier mais n'est pas une photo (${m.type_media})`); + if (!m.valide) + err(f, `média « ${m.id} » sert à identifier mais n'est pas validé — aucun humain n'a confirmé qu'il montre bien ${e.taxon.scientifique}`); + if (!m.vue) err(f, `média « ${m.id} » sert à identifier mais sa vue n'est pas renseignée`); + } + + // Cohérence des filières + if (m.filiere === 'B' && m.type_media !== 'image_generee') + err(f, `média « ${m.id} » : filière B impose type_media = image_generee`); + if (m.filiere === 'B' && m.usages.some((u) => u !== 'decor')) + err(f, `média « ${m.id} » : un média de filière B ne peut servir qu'au décor`); + if (m.filiere === 'A' && m.type_media === 'image_generee') + err(f, `média « ${m.id} » : filière A n'accepte aucune image générée`); + + // Licences — brief §3 + if (m.attribution_requise && !m.auteur) + err(f, `média « ${m.id} » : licence ${m.licence} à attribution, auteur manquant`); + if (m.composite && (m.partage_identique || m.usage_non_commercial)) + err(f, `média « ${m.id} » : compositing interdit sur un média SA ou NC (conflit de licence, ADR 0001)`); + if (m.valide && !m.valide_par) + err(f, `média « ${m.id} » : validé sans nom de validateur — une validation anonyme n'en est pas une`); + + // Signalement, pas blocage : l'ADR 0001 accepte le NC contre un engagement non commercial. + if (m.usage_non_commercial && m.source === 'wikimedia_commons') + warn(f, `média « ${m.id} » : NC annoncé sur une source Commons — vérifier, Commons n'héberge pas de NC`); + } + + // Sécurité enfants — brief §6 : « Pa touché » n'est jamais une épreuve, jamais scoré. + if (e.categorie === 'plante_dangereuse') { + if (!e.danger) err(f, 'plante dangereuse sans bloc danger'); + for (const m of e.medias) + if (m.usages.includes('epreuve')) + err(f, `média « ${m.id} » : une plante dangereuse ne peut pas porter d'épreuve — le module Pa touché n'est ni chronométré ni scoré`); + } + + // Conditions de publication d'une entrée + if (e.valide) { + const photos = e.medias.filter((m) => m.valide && m.filiere === 'A' && m.type_media === 'photo'); + if (photos.length < 2) + err(f, `entrée déclarée valide avec ${photos.length} photo(s) validée(s) — le brief §8 en exige au moins deux`); + if (e.orthographe.statut !== 'relu') + err(f, "entrée déclarée valide alors que l'orthographe kréyòl n'est pas relue (ADR 0005)"); + } else { + warn(f, 'entrée non encore validée pour publication'); + } + + if (!e.audio.gcf) warn(f, 'aucun enregistrement kréyòl — le jeu devra se replier en silence'); + if (e.orthographe.statut === 'a_relire') warn(f, 'orthographe kréyòl à relire'); + + entrees.push(e); + } + + // ── Rapport + console.log(`\nEntrées : ${entrees.length}`); + console.log(`Médias : ${nbMedias} (${nbMediasValides} validés, ${nbNC} sous clause NC)`); + console.log(`Publiables : ${entrees.filter((e) => e.valide).length}`); + + if (alertes.length) { + console.log(`\n⚠ ${alertes.length} alerte(s) — n'empêchent pas le build :`); + for (const a of alertes) console.log(` · ${a}`); + } + + if (erreurs.length) { + console.error(`\n✘ ${erreurs.length} erreur(s) — build refusé :`); + for (const e of erreurs) console.error(` · ${e}`); + process.exit(1); + } + + console.log('\n✔ Dataset conforme. Aucune épreuve ne s’appuie sur un média non validé.'); +} + +main().catch((e) => { + console.error('✘', e.stack ?? e.message); + process.exit(1); +}); diff --git a/tools/data/verify-taxa.mjs b/tools/data/verify-taxa.mjs new file mode 100644 index 0000000..b5c11a2 --- /dev/null +++ b/tools/data/verify-taxa.mjs @@ -0,0 +1,195 @@ +#!/usr/bin/env node +/** + * verify-taxa.mjs — vérification taxonomique contre Wikidata et GBIF. + * + * Le brief §8 exige que chaque champ taxonomique soit vérifié contre Wikidata ET GBIF, + * « pas contre ta mémoire ». Ce script est ce contrôle : il lit les noms scientifiques + * d'amorçage, interroge les deux référentiels, et écrit un rapport de divergence. + * + * Il ne corrige rien tout seul : il constate. Les corrections sont reportées à la main + * dans src/lib/data/fruits/*.json, avec la trace de la réponse d'API en regard. + * + * Sorties : + * tools/data/out/taxa-verified.json — données brutes des deux API + * docs/verification-taxons.md — rapport lisible, versionné + * + * Hors ligne : ce script vit dans tools/, jamais dans le bundle. Aucun appel réseau + * ne subsiste au runtime du jeu (playbook P2 : bake au build). + */ + +import { readFile, writeFile, mkdir } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); +const UA = 'ki-fwi-dataset/0.1 (https://o-k-i.net ; projet educatif ORGANISATION KA INTERNATIONALE)'; + +const WIKIDATA_SPARQL = 'https://query.wikidata.org/sparql'; +const WIKIDATA_API = 'https://www.wikidata.org/w/api.php'; +const GBIF_MATCH = 'https://api.gbif.org/v1/species/match'; +const GBIF_SPECIES = 'https://api.gbif.org/v1/species'; + +/** Rang « famille » dans Wikidata. */ +const Q_FAMILLE = 'wd:Q35409'; + +async function getJson(url, params) { + const u = new URL(url); + for (const [k, v] of Object.entries(params ?? {})) u.searchParams.set(k, v); + const res = await fetch(u, { headers: { 'User-Agent': UA, Accept: 'application/json' } }); + if (!res.ok) throw new Error(`${res.status} ${res.statusText} — ${u}`); + return res.json(); +} + +/** + * Interroge Wikidata en une seule requête SPARQL : entité dont P225 (nom du taxon) + * vaut exactement le nom cherché, plus la famille remontée par P171+ filtrée sur P105 = famille. + */ +async function wikidataBatch(noms) { + const values = noms.map((n) => JSON.stringify(n)).join(' '); + const query = `SELECT ?taxon ?name ?fam ?rang WHERE { + VALUES ?name { ${values} } + ?taxon wdt:P225 ?name . + OPTIONAL { ?taxon wdt:P105 ?r . ?r rdfs:label ?rang . FILTER(LANG(?rang) = "fr") } + OPTIONAL { ?taxon wdt:P171+ ?f . ?f wdt:P105 ${Q_FAMILLE} ; wdt:P225 ?fam . } +}`; + const u = new URL(WIKIDATA_SPARQL); + u.searchParams.set('query', query); + const res = await fetch(u, { + headers: { 'User-Agent': UA, Accept: 'application/sparql-results+json' } + }); + if (!res.ok) throw new Error(`SPARQL ${res.status} ${res.statusText}`); + const json = await res.json(); + + const parNom = new Map(); + for (const b of json.results.bindings) { + const nom = b.name.value; + if (!parNom.has(nom)) parNom.set(nom, { qid: null, famille: null, rang: null }); + const e = parNom.get(nom); + e.qid = b.taxon.value.replace('http://www.wikidata.org/entity/', ''); + if (b.fam) e.famille = b.fam.value; + if (b.rang) e.rang = b.rang.value; + } + return parNom; +} + +/** Repli quand P225 ne correspond à rien : recherche plein texte, pour au moins pointer une piste. */ +async function wikidataRecherche(nom) { + const json = await getJson(WIKIDATA_API, { + action: 'wbsearchentities', + search: nom, + language: 'en', + format: 'json', + limit: '3', + origin: '*' + }); + return (json.search ?? []).map((r) => ({ qid: r.id, label: r.label, description: r.description })); +} + +async function gbif(nom) { + const m = await getJson(GBIF_MATCH, { name: nom, strict: 'false' }); + const out = { + usageKey: m.usageKey ?? null, + scientificName: m.scientificName ?? null, + canonicalName: m.canonicalName ?? null, + rank: m.rank ?? null, + status: m.status ?? null, + matchType: m.matchType ?? null, + confidence: m.confidence ?? null, + famille: m.family ?? null, + accepte: null + }; + // Un synonyme est le piège classique de ce dataset : GBIF renvoie alors la clé du + // synonyme et il faut aller chercher le nom accepté pour ne pas figer un nom périmé. + if (out.status && out.status !== 'ACCEPTED' && out.usageKey) { + try { + const sp = await getJson(`${GBIF_SPECIES}/${out.usageKey}`, {}); + out.accepte = { + usageKey: sp.acceptedKey ?? null, + scientificName: sp.accepted ?? null + }; + } catch { + out.accepte = { erreur: 'lecture /species/{key} impossible' }; + } + } + return out; +} + +const ok = (a, b) => typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase(); + +async function main() { + const seed = JSON.parse(await readFile(join(ROOT, 'fruits.seed.json'), 'utf8')); + const entrees = [ + ...seed.fruits.map((f) => ({ ...f, categorie: 'fruit' })), + ...seed.plantes_dangereuses.map((p) => ({ ...p, categorie: 'plante_dangereuse' })) + ]; + + const noms = entrees.map((e) => e.taxon.scientifique); + console.log(`→ Wikidata : ${noms.length} taxons en une requête SPARQL…`); + const wd = await wikidataBatch(noms); + + const resultats = []; + for (const e of entrees) { + const nom = e.taxon.scientifique; + process.stdout.write(`→ GBIF : ${nom}… `); + const g = await gbif(nom); + console.log(g.status ?? 'AUCUN MATCH'); + + let w = wd.get(nom) ?? null; + let pistes = null; + if (!w) pistes = await wikidataRecherche(nom); + + const ecarts = []; + if (!w) ecarts.push('Wikidata : aucune entité avec P225 = ce nom exact'); + if (w && !w.famille) ecarts.push('Wikidata : famille non remontée par P171+'); + if (w?.famille && !ok(w.famille, e.taxon.famille)) + ecarts.push(`famille Wikidata « ${w.famille} » ≠ graine « ${e.taxon.famille} »`); + if (g.famille && !ok(g.famille, e.taxon.famille)) + ecarts.push(`famille GBIF « ${g.famille} » ≠ graine « ${e.taxon.famille} »`); + if (g.status && g.status !== 'ACCEPTED') + ecarts.push(`GBIF : statut ${g.status} — nom accepté ${g.accepte?.scientificName ?? '?'}`); + if (g.matchType && g.matchType !== 'EXACT') ecarts.push(`GBIF : matchType ${g.matchType}`); + + resultats.push({ + id: e.id, + categorie: e.categorie, + graine: { scientifique: nom, famille: e.taxon.famille }, + wikidata: w, + wikidata_pistes: pistes, + gbif: g, + ecarts + }); + } + + await mkdir(join(ROOT, 'tools', 'data', 'out'), { recursive: true }); + await writeFile( + join(ROOT, 'tools', 'data', 'out', 'taxa-verified.json'), + JSON.stringify({ genere_le: new Date().toISOString(), resultats }, null, 2) + '\n' + ); + + const lignes = [ + '# Vérification taxonomique — Wikidata × GBIF', + '', + `> Généré par \`npm run verify:taxa\` le ${new Date().toISOString().slice(0, 10)}.`, + '> 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 |', + '|---|---|---|---|---|---|---|---|' + ]; + for (const r of resultats) { + lignes.push( + `| \`${r.id}\` | *${r.graine.scientifique}* | ${r.wikidata?.qid ?? '—'} | ${r.wikidata?.famille ?? '—'} | ${r.gbif.usageKey ?? '—'} | ${r.gbif.status ?? '—'} | ${r.gbif.famille ?? '—'} | ${r.ecarts.length ? r.ecarts.join(' · ') : 'aucun'} |` + ); + } + const nbEcarts = resultats.filter((r) => r.ecarts.length).length; + lignes.push('', `**${nbEcarts} entrée(s) sur ${resultats.length} présentent au moins un écart.**`, ''); + await writeFile(join(ROOT, 'docs', 'verification-taxons.md'), lignes.join('\n')); + + console.log(`\n✔ ${resultats.length} taxons vérifiés, ${nbEcarts} avec écart.`); + console.log(' tools/data/out/taxa-verified.json'); + console.log(' docs/verification-taxons.md'); +} + +main().catch((err) => { + console.error('✘', err.message); + process.exit(1); +});