Files
khadhroony-bot3/RULES_GENERAL.md
2026-07-26 16:32:14 +02:00

88 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: RULES_GENERAL.md -->
<!-- version: 3 -->
# Règles générales du projet
## Hiérarchie normative
- Les règles sont réparties entre `RULES_GENERAL.md`, `RULES_RUST.md` et `RULES_SPECIFIC_KHADHROONY.md`.
- Les trois fichiers sont normatifs et cumulatifs.
- En cas de conflit, la règle la plus stricte sapplique.
- Une règle spécifique ne peut jamais assouplir une règle générale sans exception explicite, bornée et documentée.
- `RULES.md` est lindex de lecture obligatoire et ne duplique pas les règles détaillées.
- Avant toute tranche de travail, relire les quatre fichiers de règles, le prompt actif, `README.md`, `ROADMAP.md` et `CHANGELOG.md`.
- Toute divergence documentaire est corrigée avant le code.
## Fichiers et nomenclature documentaire
- Tous les noms de fichiers et de répertoires sont en anglais, sans accent, espace ou caractère spécial inutile.
- Les fichiers Markdown du projet sont rédigés en français, sauf contrat externe ou documentation technique devant rester en anglais.
- Tout fichier texte qui supporte des commentaires commence par son chemin relatif et une version entière.
- Chaque fichier texte se termine par exactement une fin de ligne.
- Les documents livrés sont au format Markdown lorsquun format textuel suffit.
## Responsabilités documentaires
- `README.md` décrit le projet, son rôle, ses objectifs et son organisation ; il ne sert pas de changelog.
- `ROADMAP.md` contient les futures étapes, versions et changements prévus.
- `CHANGELOG.md` nest modifié quaprès validation explicite dune version.
- Les documents de session et checklists conservent des critères dacceptation vérifiables.
- Chaque crate publique possède un `README.md` ou `001.README.md` et, à la clôture de la migration, un `USAGES.md`.
- Une API publique ajoutée ou modifiée nest pas considérée comme documentée tant que la documentation de sa crate nest pas synchronisée.
## Travail par tranches
- Commencer par les règles et les audits structurels.
- Travailler par deltas courts et cohérents.
- Corriger immédiatement les erreurs locales remontées.
- Ne pas masquer les erreurs métier par des exceptions globales.
- Ne pas déclarer une tâche validée sans commande, test, audit ou contrôle runtime correspondant.
- Une validation non exécutée doit être indiquée comme telle.
## Frontières JSON et JavaScript
- Tout payload de commande, dévénement ou dIPC traversant une frontière JSON ne doit jamais exiger un `bigint` JavaScript.
- Pour un entier Rust borné et garanti représentable par linterface, utiliser un override TS-rs `number`.
- Lorsque lexactitude au-delà de `Number.MAX_SAFE_INTEGER` est nécessaire, sérialiser explicitement une chaîne décimale côté Rust et exporter `string`.
- Ne jamais construire un `BigInt` dans un objet transmis à une commande, un événement ou une API sérialisée en JSON.
## Helpers de contrôle
- Les scripts Python, shell ou autres helpers daudit sont strictement en lecture seule vis-à-vis du code et de la documentation contrôlés.
- Un helper peut rechercher, analyser et signaler des erreurs ou motifs potentiellement suspects, mais ne doit jamais réécrire, reformater, renommer, supprimer ou corriger automatiquement un fichier du workspace.
- Les résultats des helpers sont des diagnostics à vérifier ; une recherche heuristique ou regex ne constitue pas à elle seule une preuve de non-conformité.
- Les helpers peuvent inclure des recherches regex ciblées, notamment sur les chemins Rust longs comme `crate::module::Item`, afin de faciliter une revue manuelle des façades et réexports.
- Toute modification du code reste une action explicite, séparée de laudit, et doit apparaître dans le delta correspondant.
## Livraisons delta
- Après le squelette initial, livrer uniquement des ZIP delta sauf demande explicite darchive complète.
- Un delta touchant la racine ou plusieurs modules se nomme `khadhroony-bot3_vX.Y.Z-pre.abc-delta.zip`.
- Un delta limité à un package Rust se nomme `kb-modulename_vX.Y.Z-pre.abc-delta.zip`.
- Un correctif dun delta déjà livré conserve le même numéro de prerelease et utilise `-delta-fix-001.zip`, puis `-fix-002.zip`, etc.
- La numérotation des correctifs recommence à `fix-001` pour chaque nouvelle prerelease.
- Le numéro de prerelease suivant est réservé à une nouvelle tranche fonctionnelle.
- Chaque archive contient un `delta.md` à sa racine. Son titre et son en-tête ne contiennent aucun numéro de version, de prerelease ou de correctif.
- `delta.md` liste : base requise, correctifs antérieurs requis, fichiers ajoutés, fichiers modifiés, fichiers à supprimer, validations exécutées, validations non exécutées et remarques dapplication.
- Chaque fichier à supprimer est accompagné dune commande indépendante `rm -- <chemin>` directement copiable depuis la racine du workspace.
- Le ZIP ne contient que les fichiers ajoutés ou modifiés et `delta.md`.
- Les suppressions sont documentées dans `delta.md`, car lextraction dun ZIP ne supprime rien.
- Toute livraison exclut les fichiers locaux, secrets, caches, sorties de compilation et artefacts régénérables, même lorsquils existent dans le workspace de développement.
- Sont notamment exclus : `Cargo.lock`, `package-lock.json`, `node_modules/`, `target/`, `dist/`, `gen/`, les bindings TS-RS générés, `__pycache__/`, les logs, les PID, les bases locales, `data/`, `dbdata/`, les fichiers dIDE et les fichiers de configuration locale.
- Les fichiers `.env` et `.env.*` sont exclus, sauf exemples explicitement publiables tels que `.env.example` et profils sans secret expressément autorisés.
- `Cargo.lock` peut être nécessaire dans le workspace local pour stabiliser une résolution transitive, mais il reste non versionné et non livrable dans ce projet.
- `package-lock.json` reste non versionné et non livrable ; les dépendances frontend sont restaurées depuis `package.json`.
- `delta.md` constitue lunique exception aux motifs locaux `delta*.md` : il est généré pour la livraison et doit être placé à la racine du ZIP.
- Aucun manifeste de livraison nest généré ou inclus : ni `manifest.json`, ni manifeste SHA, ni liste de checksums.
- Aucune empreinte SHA256 nest produite ou incluse dans les livraisons.
- Une archive déjà livrée ne doit jamais être remplacée silencieusement sous le même nom.
## Contrôle minimal avant livraison
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
```
Les validations supplémentaires dépendent du périmètre du delta et sont consignées dans `delta.md`.