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);
+});