Commit Graph
7 Commits
Author SHA1 Message Date
OKIandClaude Opus 5 eaaf7c34ad fix(assets): le test de reproductibilité ne vidait pas le cache ComfyUI
Correction d'une preuve qui n'en était pas une.

Ma vérification lançait le même plan deux fois et comparait les
empreintes. Le porteur ayant indiqué où ComfyUI écrit ses images, le
dossier a pu être inspecté : UN SEUL fichier y figurait alors que deux
exécutions avaient été lancées.

ComfyUI met en cache le résultat d'un graphe identique. La « deuxième
exécution » n'avait rien recalculé — elle avait relu la première.
Comparer deux empreintes dans ces conditions ne mesure que le cache.

Après POST /free, une exécution authentique produit decor_00002_.png,
bit-identique au premier. La conclusion était juste, la méthode ne
l'était pas.

Le test devient un mode de l'outil plutôt qu'une manipulation :
--reproductibilite génère, vide le cache, régénère et compare. Un test
de reproductibilité qui ne vide pas le cache se ment à lui-même.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 12:25:52 -04:00
OKIandClaude Opus 5 bd29770bd2 feat(sessions-5-6): candidats vérifiés et audit de livraison
Session 5 — bloquée sur ce qu'aucun agent ne peut produire : les noms
kréyòl. Le nom kréyòl est le nom principal de chaque entrée (ADR 0005) ;
inventer seize noms aurait été exactement ce que le projet s'interdit.

Livré à la place : verify:candidats vérifie 16 espèces candidates contre
Wikidata et GBIF et produit un tableau complet — nom accepté, famille,
Q-id, clé GBIF, français — avec une colonne vide. Il ne manque que ce
qu'une machine ne peut pas produire.

15 candidats sur 16 sans écart. Le seizième a attrapé mon erreur :
j'avais proposé Citrus sinensis pour l'orange, GBIF le renvoie en
SYNONYM. C'est le rôle du contrôle.

Session 6 — npm run audit vérifie la DoD sur le build réel, pas sur les
intentions. Sortie non nulle = livraison refusée. 14 points au vert :
zéro chargement tiers, zéro emoji, zéro lien interne mort sur 74 pages,
shell JS à 86 Ko gzip, aucun chunk lourd sur le chemin critique, SEO
complet, fichiers de service présents, polices self-hébergées.

Restent ouverts et annoncés comme tels : Lighthouse, 30 fps sur Mali-G52,
hors ligne en mode avion, prefers-reduced-motion à la main, et le test en
classe. Ce sont des mesures qu'un agent ne peut pas prendre ; les
annoncer comme faites aurait été le seul vrai échec.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 12:10:16 -04:00
OKIandClaude Opus 5 3c660c776b feat(session-4): module Pa touché et scène arcade Ranmasé en Phaser 4
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>
2026-07-27 12:07:48 -04:00
OKIandClaude Opus 5 ebb05796c9 feat(session-3): pipelines d'assets, un par filière
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>
2026-07-27 11:56:25 -04:00
OKIandClaude Opus 5 ccad7177b3 feat(session-1): socle SvelteKit et encyclopédie /zerbaj/ prérendue
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>
2026-07-27 11:44:21 -04:00
OKIandClaude Opus 5 9e3c176411 feat(participatif): publier les manques et outiller la contribution
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>
2026-07-27 10:12:35 -04:00
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