Pa touché est une consultation, pas un mode de jeu : cinq plantes triées
par gravité, dépliables, sans chrono, sans score, sans épreuve. Le module
affiche lui-même qu'il n'a pas encore été relu par une personne compétente
et dit que cette relecture est la contribution la plus utile au projet.
Ranmasé : import dynamique, game.destroy(true) au démontage, communication
par événements — la scène ne touche aucun état Svelte et n'émet que sur
changement, jamais par frame. Miroir DOM sémantique, canvas aria-hidden,
jouable au clavier. Écran de chargement designé.
Game design guidé par la pédagogie : laisser passer une plante dangereuse
ne coûte rien (c'est le bon geste), ramasser le mauvais fruit coûte 2
points et pas une vie (il n'y a pas d'erreur à cueillir), une plante
dangereuse sur cinq.
Budgets mesurés et consignés dans l'ADR 0002
- shell hors Phaser : 78 Ko gzip (budget 170)
- Phaser seul : 348 Ko gzip, sous le seuil de réexamen de 450
- absent du chemin critique de l'accueil, vérifié sur le HTML prérendu
- build total 1,4 Mo
Une prescription de l'ADR 0002 était fausse : l'option `resolution`
n'existe pas dans Phaser 4 (pixelRatio y est en lecture seule). Le
plafonnement passe par un tampon de rendu fixe 480×640 étiré en CSS —
plafond dur plutôt que relatif. L'ADR est corrigé, pas contourné.
Reste non mesuré : les 30 fps sur Mali-G52, qui demandent un appareil réel.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le porteur a ouvert l'accès à son instance ComfyUI : le pipeline a été
exécuté, pas simulé.
Deux exécutions du même plan produisent des images BIT-IDENTIQUES
(seed 3475989105, sha256 b7007a7a…). C'est exactement ce que le pack
d'origine annonçait sans y parvenir, et c'est désormais vérifié.
Workflow de référence : SDXL 1.0, 1024×576, 20 pas, dpmpp_2m/karras.
Deux défauts de mon propre client, révélés par l'exécution réelle :
- le prompt négatif était concaténé au positif — travers hérité du pack.
Sur SDXL cela revient à demander ce qu'on voulait exclure. Nœud propre.
- les images n'étaient pas rapatriées : elles restaient chez ComfyUI et
le manifeste pointait vers des chemins inexistants. Ajout de recuperer().
Krea 2 : deux choses distinctes portent ce nom. Les poids locaux
krea2_turbo_nvfp4 sont un build FP4 NVIDIA Blackwell, sur GPU AMD —
probablement inexploitable. Krea2ImageNode est un nœud api_node vers un
service tiers payant. Trois points à trancher avant câblage : export au
format API, écart de doctrine à inscrire, et licence des sorties à
vérifier avant toute publication sous CC BY-SA.
SDXL local reste le défaut : aucun coût, aucune donnée qui sort.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Filière A — fetch:medias rapatrie les photographies VALIDÉES depuis
Commons et les encode en AVIF/WebP à 480, 800 et 1200 px. Aujourd'hui :
0 traité, 39 ignorés — le pipeline respecte la porte de validation au
lieu de la contourner. Vérifié sur une copie : source de 256 Ko → 106 Ko
en AVIF 1200 px, 36 Ko en 480 px, budget de 200 Ko tenu.
ImageMagick est une dépendance système, pas un paquet npm.
Filière B — client ComfyUI en bibliothèque standard seule, hors bundle.
Les trois défauts du pack d'origine sont corrigés :
- hash() est randomisé par exécution depuis Python 3.3, donc les seeds
du pack n'étaient PAS reproductibles malgré son argumentaire. Remplacé
par zlib.crc32 et prouvé empiriquement — deux processus avec des
PYTHONHASHSEED différents donnent les mêmes valeurs.
- copy.deepcopy au lieu de json.loads(json.dumps(...)).
- rembg reste commenté avec l'avertissement qui manquait : le paquet est
MIT, les poids du modèle ne le sont pas nécessairement.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Trois modes, l'album et la progression locale. Aucun Phaser.
Kaché est pleinement jouable : indices dévoilés un à un (feuille →
écorce → port → coupe → fruit), score dégressif de 100 à 20. Il ne
dépend d'aucune photographie, ce qui le rend jouable aujourd'hui alors
qu'aucune image n'est validée. Les distracteurs sont tirés par proximité
botanique — un corossol face à une pomme-cannelle enseigne la vraie
confusion, deux Annona qu'on confond réellement.
Sézon est jouable et affiche en permanence que sa saisonnalité n'est
sourcée nulle part (a-arbitrer §3). Signalé, pas caché.
Rekonèt est complet mais bloqué : 0 photo validée sur 8 espèces. Il
affiche un état designé qui dit pourquoi, et pose la règle n°1 là où un
enfant la lira — il ne se rabattra jamais sur une image générée.
Répétition espacée Leitner à 5 boîtes dans localStorage, tirage pondéré
8 contre 1 vers les boîtes basses. Vérifié en jouant : bonne réponse →
boîte 2 et fiche débloquée, erreur → retour boîte 1. Export/import JSON,
aucun compte, aucune donnée qui quitte l'appareil.
use:compte pour le moment de révélation : rAF → DOM direct, span animé
aria-hidden, valeur finale en .sr-only dans une région aria-live.
Mesures
- 65,6 Ko de JS gzip (budget 170) · 68 pages prérendues
- npm run check : 259 fichiers, 0 erreur, 0 warning
- elementFromPoint à 375 px : 0 recouvrement, 0 cible sous 44 px
- ordre de tabulation naturel, aucun tabindex positif
Défaut trouvé en testant : le fil d'Ariane faisait 16 px de haut sur
mobile. Corrigé — un lien seul sur sa ligne est une commande, pas un
lien de texte.
La porte « le jeu est-il amusant sans Phaser » reste ouverte : elle
demande de jouer, et elle appartient au porteur.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
SvelteKit 2 + Svelte 5 runes + TS strict, adapter-static en prérendu
intégral, trailingSlash always, paths.relative false.
Mesures de la porte de sortie
- 56 pages HTML prérendues (13 fiches × 3 langues + pages de service)
- 59 Ko de JS gzip (budget : 170) · build total 1,4 Mo (budget : 2 Mo)
- 0 chargement tiers, vérifié par grep du build
- fiche lisible sans JS : 1694 caractères de texte rendu
- npm run check : 248 fichiers, 0 erreur, 0 warning
- 0 erreur console au chargement
Lighthouse non exécuté : porte encore ouverte, à vérifier avant la S6.
Charte OKI
Tokens partagés, thème sombre par défaut, Archivo et Inter self-hébergées
(124 Ko de woff2), flag-bar à segments francs, bouton à balayage or,
gate prefers-reduced-motion unique. CSP stricte en .htaccess et _headers,
404 statique autonome, PWA avec registerSW à chemin absolu (playbook 2.9).
L'interface kréyòl n'est pas écrite par l'agent
Le catalogue gcf ne contient que les termes venant des documents du
porteur — 10 chaînes sur 132. Le reste vaut null et se replie sur le
français ; check:i18n produit la liste des 122 phrases à traduire, par
écran. <html lang> annonce la langue réellement écrite : fr tant que la
couverture reste sous 60 %, avec les fragments kréyòl marqués un par un.
Des tournures kréyòl que j'avais inventées ont été retirées.
Corrections en cours de build
- vite-plugin-pwa/sveltekit n'existe pas sans @vite-pwa/sveltekit :
VitePWA en direct, comme le prescrivait déjà le playbook.
- @sveltejs/vite-plugin-svelte v7 n'exporte plus sveltekit : import
depuis @sveltejs/kit/vite, vérifié sur les exports réels.
- Le sélecteur de langue fabriquait /fr/offline/, page inexistante.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Amendement de l'ADR 0005 : la relecture ne repose plus sur un relecteur
unique. La porte ne s'abaisse pas — l'ouverture porte sur qui peut
proposer, jamais sur qui peut valider.
La communauté existait déjà
- Lingua Libre compte 456 enregistrements en kréyòl gwadloupéyen, versés
sur Commons sous licence libre.
- Trois de nos treize noms y figuraient déjà — gouyav, kénèt, zikak — en
CC BY-SA 4.0 et AVEC EXACTEMENT NOTRE GRAPHIE. Trois entrées sortent du
doute par corroboration externe, sans que le projet décide quoi que ce
soit. La question n'était pas qui trancherait, mais d'aller regarder.
- En regard : 0 lexème Wikidata en gcf, 0 étiquette gcf sur les 13 items.
Modèle de données
- orthographe.statut : a_relire | en_discussion | relu. Un doute signalé
sans question posée est refusé par le validateur — on ne décourage pas
le lecteur, on l'appelle. 4 entrées en discussion : ake, medisinye,
lorye-jonn, pom-dlo.
- noms.variantes_gcf : les usages proposés sont conservés avec leur source
et leur île, jamais écrasés. Une graphie identique au nom principal est
refusée comme variante : c'est une corroboration, pas un désaccord.
- audio : source, licence, url_description, locuteur crédité, valide.
check:audio interroge Lingua Libre et trouve seul les prises existantes.
Porte : 14/14 (5 cas ajoutés sur la langue et la prononciation).
Pis-aller assumé : les 4 questions sont rédigées en français. Les écrire
en kréyòl reviendrait à produire du kréyòl non relu au moment même où l'on
reconnaît ne pas savoir le faire. Leur traduction est la première
contribution demandée.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le manque devient une information de première classe : mesuré, daté,
affiché, et accompagné de la marche à suivre pour le combler (ADR 0006).
Mesure
- rapport:manques : couverture des 5 vues pédagogiques dans les fonds
publics, présence du kréyòl sur Wikidata, observations GBIF par île,
manques internes du dataset → docs/manques.md.
- Le kréyòl est absent des communs : Wikidata enregistre 124 noms
vernaculaires pour ces 13 espèces (zh, en, pt, sl) et aucun en kréyòl ;
0 étiquette gcf sur 13 items.
- L'écorce est la vue manquante : 3 trous sur 65, tous des écorces —
mansiniyé 0 fichier, aki 0, kénèt 1.
- Pl@ntNet publie en CC BY-SA là où iNaturalist est à ~93 % CC BY-NC :
meilleur canal de contribution à effort égal.
Correction d'une mesure fausse avant publication
- Le premier rapport annonçait 28 vues manquantes sur 65. Le groupement OR
de la recherche Commons ne se comporte pas comme attendu : « section »
seul remonte 17 fichiers là où « (section OR sliced OR cut OR coupe) » en
remonte 0. Un mot, une requête, avec gestion du débit — le chiffre réel
est 3 sur 65. Publier les 28 aurait envoyé des bénévoles photographier
ce qui existait déjà.
Documents
- docs/contribuer.md : six gestes, du nom kréyòl sur Wikidata (5 min) à
l'enregistrement d'une voix, avec le tableau de choix de licence et la
consigne de sécurité pour photographier le mancenillier.
- docs/adr/0006-projet-participatif.md : aucun dépôt interne, aucune
requête tierce au runtime, la porte de validation reste inchangée.
- docs/courriers/appel-liberation-tramil.md : brouillon d'appel public,
à n'envisager qu'après la demande privée. Publication au porteur.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>