Files
ki-fwi/docs/sessions/00-cadre-et-donnees.md
T
OKIandClaude Opus 5 945a524b44 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>
2026-07-26 23:47:27 -04:00

8.4 KiB

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.