Files
ki-fwi/docs/adr/0002-phaser-hors-budget-initial.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

2.7 KiB

ADR 0002 — Phaser 4 et l'écart au budget JS

  • Statut : accepté, avec mesure à compléter en session 4
  • Date : 2026-07-27
  • Session : 0 — cadre et données

Contexte

Le playbook OKI §2.7 fixe un budget non négociable de 170 Ko de JS initial compressé. Le mode arcade « Ranmasé » demande de la physique, des particules et du game feel : le faire en DOM coûterait plus cher en travail et en performance qu'un moteur éprouvé.

Le pack d'origine prescrivait « Phaser 5 ». Phaser 5 n'existe pas. Vérification faite au démarrage de la session :

$ npm view phaser version
4.2.1

La branche courante est Phaser 4 — 4.0 « Caladan » (avril 2026), 4.1 « Salusa », 4.2 « Giedi » — avec un moteur WebGL réécrit en render nodes. Partir de Phaser 3 aurait été partir d'une branche en fin de vie.

Décision

Utiliser phaser@^4 (4.2.1 au moment de la décision), et assumer un écart documenté au budget JS, borné par quatre conditions :

  1. Phaser n'est jamais dans le chemin critique. Import dynamique dans la route (jeu)/ranmase uniquement, jamais au layout racine.
  2. Le shell reste ≤ 170 Ko gzip, Phaser exclu. Le budget n'est pas relâché : il est mesuré à part.
  3. L'entrée dans la scène passe derrière un écran de chargement designé (playbook P5, en KA avec le tambour ka), pas derrière une page blanche.
  4. Rendu AUTO (WebGL avec repli canvas), DPR plafonné à 1,5, powerPreference: 'low-power', cible 30 fps stables sur Mali-G52.

Conséquences

  • Le budget d'entrée du site (≤ 2 Mo) et les Core Web Vitals (LCP < 2,5 s, INP < 200 ms, CLS < 0,05) restent mesurés sur l'accueil et sur une fiche, pages qui ne chargent jamais Phaser.
  • Un utilisateur qui ne joue jamais au mode arcade ne télécharge jamais Phaser. Les quatre autres modes sont en Svelte pur (ADR 0003).
  • La session 4 doit renseigner ici la mesure réelle du bundle Phaser en gzip et le relevé de fps sur mobile d'entrée de gamme.

Mesures — à compléter en session 4

Mesure Cible Relevé
Shell JS initial (gzip) ≤ 170 Ko à mesurer
Bundle Phaser seul (gzip) information à mesurer
fps scène Ranmasé sur Mali-G52 ≥ 30 stables à mesurer
Poids total de l'accueil ≤ 2 Mo à mesurer

Condition de réexamen

Si la mesure de session 4 montre que Phaser dépasse ~450 Ko gzip, ou que les 30 fps ne sont pas tenus sur mobile d'entrée de gamme, la scène « Ranmasé » est réécrite en DOM/CSS avec une boucle rAF maison — le playbook P3 (« DOM d'abord, WebGL seulement où ça paie ») reprend alors la main. Les quatre autres modes n'en dépendent pas : le jeu reste entier.