Aller au contenu
TLRFRAMEWORK REDM Ma console

Conventions du projet

Règles à suivre pour tout code ou toute page ajoutée à tlr_core ou à un module TLR. Elles reprennent le fichier CLAUDE.md à la racine de la ressource. Retour au sommaire.

Langue et écriture

  • Tout est en français : code, commentaires, libellés de l'interface, messages, documentation.
  • Aucun caractère tiret dans les textes, les libellés et les commentaires. Remplacez le par une virgule, un point ou deux points. Dans les mots composés, écrivez les mots séparés (« au dessus », « vous même »). Pour un commentaire Lua, qui commence forcément par deux tirets, gardez le commentaire mais pas de tiret dans son texte.
  • Les listes de la documentation commencent par « * ».
  • Les montants sont des entiers en centimes, affichés avec FormatMoney ou en dollars dans les formulaires.

Tests

  • Tests hors jeu en Lua 5.4 : lua tests/run.lua depuis le dossier de la ressource.
  • À lancer après toute modification de shared/ ou d'un domaine testé.
  • La logique vérifiable va dans shared/, en Lua pur sans native, avec son fichier tests/test_<domaine>.lua.
  • Ce qui demande le jeu est signalé « à vérifier en jeu » dans la documentation du domaine et dans docs/TESTS.md.

Interface NUI

  • HTML, CSS et JS vanilla dans web/, modules ES, sans bundler ni package.json. Pas de Tailwind, React, GSAP ni autre dépendance.
  • Aucune ressource externe : pas de CDN, pas de polices ni d'icônes distantes. Polices dans web/fonts/<domaine>/, bibliothèques dans web/vendor/, images dans web/img/. Icônes en SVG locaux, jamais d'emoji comme icône.
  • Couleurs, rayons, espacements et polices uniquement par les variables de web/css/tokens.css (fond, surfaces, texte, texte secondaire, accent, lignes, couleurs d'état ok, warn, bad et info...). Aucune couleur en dur : sinon elle ignore les thèmes.
  • Sept thèmes redéfinissent ces variables dans web/css/themes.css : crepuscule (par défaut), cuir, journal (clair), saint_denis, new_austin, roanoke, sang. Tout écran reste lisible dans les sept. Une nouvelle variable reçoit une valeur dans chaque thème.
  • Fond de page transparent : le jeu est visible derrière.
  • Réutiliser les composants existants (.btn, .input, .field, .pill, .alert, tableaux...) avant d'en créer ; un nouveau composant porte le préfixe de son domaine.
  • Clavier et souris partout, style de focus clavier toujours visible, Échap ferme l'écran.
  • Animations courtes sur transform et opacity seulement, respect de la préférence « mouvement réduit » du système.
  • Direction artistique : Ouest américain de 1899, papier, cuir, laiton, encre ; panel admin sobre et dense.

Fichiers et manifeste

  • Tout nouveau fichier doit être déclaré dans fxmanifest.lua (bloc files pour la NUI, shared_scripts, server_scripts, client_scripts pour le Lua). Les motifs existants couvrent déjà web/css/*.css et web/js/** ; un nouveau sous dossier ou type de fichier demande une ligne.
  • Une nouvelle feuille de style est aussi liée dans web/index.html.
  • Les fichiers de config/ appartiennent au propriétaire du serveur : le code ne les réécrit jamais.

Base de données

  • Les migrations se déclarent avec TLR.Migrations.add({ id, name, sql }), avec un numéro réservé au domaine.
  • Une migration publiée n'est jamais modifiée : pour changer une table, ajoutez une nouvelle migration.
  • Requêtes préparées avec paramètres, jamais de concaténation de valeurs venues d'un joueur.

Sécurité du code serveur

  • Le serveur décide de tout : le client et la page ne font que demander.
  • Toute action de l'interface passe par TLR.RPC.register avec un schéma et une permission. Refus par défaut.
  • Chaque action sensible est écrite au journal avec TLR.Log.write.
  • Chaque opération d'argent porte un opId unique pour ne jamais être appliquée deux fois.

Voir aussi l'architecture et Créer un module externe.

Source : tlr_core/docs/guide/dev_conventions.md