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>
2.9 KiB
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 :
- Import dynamique uniquement, dans la route de la scène. Un
importstatique de Phaser au layout racine ferait entrer 300 à 400 Ko dans le chemin critique de toutes les pages, y compris de l'encyclopédie. - 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. - 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.
- 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.