Aller au contenu

Contribuer

Le guide complet vit dans CONTRIBUTING.md. En résumé :

Deux règles non négociables

Zéro dépendance d'exécution. Romule tourne sur la seule bibliothèque standard de Python, et un job d'intégration continue bloquant échoue si un import hors stdlib apparaît. Les binaires externes (adb, nsz, unar, 7z) sont facultatifs : l'absence de l'un désactive une fonction, jamais le démarrage.

Aucune donnée personnelle, aucune donnée de jeu, aucune clé. outils/verifier-fuite.py refuse les clés de console, les ROMs, les images de jaquette, les fichiers d'état, les identifiants et les adresses IP privées dans l'index git.

Lancer les contrôles

python3 lancer_tests.py --navigateur   # les cinq familles
python3 outils/verifier-fuite.py       # contrôle de fuite
python3 -m romule.audit                # 0 grave, 0 alerte attendus

La famille navigateur pilote un vrai Chrome sans affichage et attrape ce que la lecture du CSS ne peut pas voir : débordement, contrôles recouverts par d'autres, phrases non traduites. Si tu touches à l'interface, lance-la.

lancer_tests.py joue déjà les contrôles de source — celui des fuites est à part, parce qu'il lit l'index git et non l'arbre de travail :

Contrôle Ce qu'il refuse
verifier-anglais.py de la prose française dans les commentaires, docstrings et commentaires HTML
verifier-imports.py un module ou un mot-clé qu'un renommage a laissé derrière lui
verifier-classes.py une classe CSS stylée dans un fichier et renommée dans un autre
verifier-traduction.py une phrase française du code absente du catalogue
verifier-chiffres.py un nombre de la documentation que le code ne soutient plus
verifier-reglages-doc.py un réglage sans ligne dans la référence

Chacun s'éprouve lui-même avant de juger : un contrôle qu'on n'a jamais vu échouer ne prouve rien.

Ajouter une traduction

Copie romule/locales/fr.json en xx.json, garde les clés françaises, traduis les valeurs, et pose _meta.langue au nom de la langue dans sa propre langue. Elle apparaît toute seule dans le sélecteur.

N'assemble jamais une phrase à partir de morceaux

'Trouvé ' + n + ' jeux' produit trois clés qu'aucun catalogue ne peut tenir. Utilise tpl('%d {jeu|jeux} trouvé', n), ou countPhrase(n, '{jeu|jeux}') pour un simple décompte. Cette erreur a déjà caché 49 phrases au contrôle de traduction.

Les pluriels s'écrivent {singulier|pluriel}

1 fichier(s) n'est pas un pluriel, c'est un aveu. Les deux formes vont dans la chaîne — countPhrase(n, '{fichier|fichiers}') — et le catalogue en choisit une par langue, car les règles diffèrent : le français écrit 0 fichier au singulier, l'anglais écrit 0 files au pluriel. Une règle unique remplacerait une faute par une autre.

Refaire les captures d'écran

python3 outils/captures.py

Depuis une bibliothèque inventée — trente titres, neuf plateformes, des jaquettes dessinées à la volée, une console de figuration. C'est le défaut, et c'est la réponse pour presque toute modification : une capture prise sur une vraie installation dit ce que son propriétaire possède, et emporte les jaquettes d'éditeurs dans un dépôt public.

Deux façons d'en photographier une vraie, quand c'est elle le sujet :

python3 outils/captures.py --racine ~/mes-donnees      # depuis les sources
python3 outils/captures.py --url http://localhost:8787 # une instance déjà là

--racine démarre un serveur depuis l'arbre de travail sur ce dossier de données, prend les vues, puis l'arrête. À préférer pendant le développement. --url sur un conteneur suppose de reconstruire l'image à chaque correctif — et une reconstruction redémarre le serveur adb, ce qui fait tomber la console, c'est-à-dire l'appairage dont les captures ont besoin. Depuis les sources, il n'y a aucune reconstruction : le code est celui qui est sur le disque.

Dans les deux cas l'outil masque adresses, courriels, numéros de série et chemins personnels avant de déclencher, et refuse la capture s'il reste à l'écran quelque chose qu'il ne sait pas masquer. outils/verifier-fuite.py lit des fichiers texte ; il ne sait pas lire un PNG, et l'adresse de la console est en clair sur l'un de ces écrans.

Ajouter un profil d'émulateur

Dépose un fichier JSON dans romule/profils/, sur le modèle d'eden.json. Pose "verifie": false à moins de l'avoir éprouvé face à du matériel réel — l'interface étiquette les profils non vérifiés, et cette étiquette est le défaut honnête.

Style de la maison

Les commentaires et les docstrings sont en anglais, comme tout ce que le dépôt montre. outils/verifier-anglais.py y refuse la prose française et la CI le lance ; une ligne qui cite volontairement du français porte anglais:ok avec sa raison à côté. Les chaînes d'interface, elles, restent en français — ce sont les clés du catalogue i18n, un mécanisme et non un style.

Un commentaire dit pourquoi, jamais quoi : s'il redit la ligne d'en dessous, supprime-le. Ceux qui valent la peine expliquent une contrainte invisible dans le code — une règle qui en combat une autre, une valeur mesurée, un bogue qu'une réécriture naïve ramènerait.