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.