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

Session 0 du plan — aucun code applicatif.

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

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

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

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

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
OKI
2026-07-26 23:47:27 -04:00
co-authored by Claude Opus 5
parent f0b3ce8484
commit 945a524b44
45 changed files with 8599 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
# ADR 0001 — Licences du code, du contenu et des médias
- **Statut :** accepté
- **Date :** 2026-07-27
- **Session :** 0 — cadre et données
- **Décideur :** le porteur (ORGANISATION KA INTERNATIONALE)
## Contexte
Le pack d'origine parlait de « ressources libres de droit ». L'expression n'a pas
d'existence juridique et masque quatre régimes très différents :
- **Wikimedia Commons** n'héberge que du libre, mais majoritairement du **CC BY-SA**,
qui impose l'attribution nominative **et** le partage à l'identique. Le partage à
l'identique contamine les œuvres dérivées.
- **iNaturalist** publie beaucoup de **CC BY-NC**, incompatible avec toute distribution
commerciale.
- **TRAMIL** (tramil.net) n'accorde aucune licence dans ses mentions légales. Par défaut :
tous droits réservés.
- **CIRAD / INRAE** appliquent des régimes mixtes, majoritairement propriétaires, avec des
usages pédagogiques négociables au cas par cas.
Le projet vise des enfants de 7 à 12 ans dans un cadre scolaire. Une erreur de licence sur
un support diffusé en classe n'est pas rattrapable par un correctif.
## Décision
### Code — AGPL-3.0-or-later
`LICENSE` contient le texte canonique récupéré depuis gnu.org. L'AGPL plutôt que la GPL
parce qu'une version future pourrait exposer une face serveur (export de progression pour
un enseignant, tableau de classe) : l'AGPL couvre l'usage en réseau, la GPL non.
### Contenu rédigé par OKI — CC BY-SA 4.0
Textes, fiches, indices botaniques, module « Pa touché », données structurées. Cohérent
avec Commons, donc réutilisable par le projet lui-même et par les enseignants.
### Médias tiers — licence d'origine conservée, œuvre collective
Chaque média garde sa licence. Le jeu est une **œuvre collective**, pas une œuvre dérivée.
C'est cette qualification qui permet à des médias CC BY-SA et CC BY-NC de coexister dans
un même produit.
### Clause non commerciale — acceptée, et irréversible
Le porteur a tranché en session 0 : le CC BY-NC est accepté pour élargir le fonds
photographique, en échange d'un **engagement non commercial définitif** sur le jeu.
Le code reste réutilisable commercialement sous AGPL une fois séparé des médias.
## Conséquences
### Ce que cette décision interdit, techniquement
1. **Aucun compositing.** Un média sous partage à l'identique ou sous clause non
commerciale ne peut être ni fusionné, ni détouré puis recombiné, ni fondu dans un atlas
de textures partagé avec d'autres médias. C'est ce qui préserve la qualification
d'œuvre collective.
2. **Aucune vente**, aucune version payante, aucune licence à un éditeur tant qu'un seul
média NC est embarqué.
3. **Aucun fichier TRAMIL.** TRAMIL se cite comme source de vérification factuelle, dans
`sources_factuelles`, jamais comme source d'images.
### Ce qui applique la décision
- `npm run validate:data` refuse tout média `composite: true` portant une clause SA ou NC,
et tout média à attribution dont l'auteur est absent.
- `npm run test:porte` prouve que ces refus se produisent réellement.
- `npm run build:credits` régénère `CREDITS.md` depuis les données, avec une section
distincte pour les médias NC. Un fichier de crédits tenu à la main se désynchronise, et
une attribution fausse est une violation.
- Le schéma impose `licence`, `auteur`, `url_fichier` et `url_description` sur chaque média.
### Condition de réexamen
Si le projet devait un jour être distribué commercialement, il faudrait retirer tous les
médias NC et régénérer les crédits. `CREDITS.md` liste ces médias dans une section dédiée
précisément pour rendre cette opération possible. À ce jour, aucun média NC n'est embarqué :
les 39 médias candidats proviennent tous de Commons, sous CC0, domaine public, CC BY ou
CC BY-SA. **L'engagement non commercial n'est donc pas encore consommé** — il ne le sera
qu'au premier média iNaturalist retenu.
## Alternatives écartées
- **Refuser le NC.** Aurait gardé une porte de sortie commerciale, au prix d'un fonds
photographique plus pauvre sur les espèces mal couvertes (zikak, pòm-sitè).
- **Isoler le NC dans un pack séparé retirable par flag.** Meilleur des deux mondes sur le
papier, mais complexifie le pipeline d'assets et le service worker pour une option dont
le porteur a jugé qu'il ne l'exercerait pas.