v0.1.0-pre.056

This commit is contained in:
2026-07-26 16:32:14 +02:00
parent a3ce8d733f
commit 562f5c08ed
36 changed files with 801 additions and 872 deletions

87
RULES_GENERAL.md Normal file
View File

@@ -0,0 +1,87 @@
<!-- 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`.