Files
khadhroony-bot3/docs/RUST_WORKSPACE_RULE_AUDIT.md
2026-07-24 23:24:14 +02:00

86 lines
3.2 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: docs/RUST_WORKSPACE_RULE_AUDIT.md -->
<!-- version: 2 -->
# Audit des règles Rust du workspace
Lentrée unique est :
```bash
python3 scripts/audit_rust_workspace_rules.py
```
Elle exécute trois contrôles obligatoires :
1. `audit_rust_general_rules.py` pour les règles Rust réutilisables ;
2. `audit_rust_export_completeness.py` pour la fermeture des façades ;
3. `audit_khadhroony_workspace_rules.py` pour les contrats propres au projet.
## Façades et réexports
Tous les modules sont privés avec `mod`. Une API de crate est formée uniquement par des
réexports explicites depuis `lib.rs` ou `main.rs`.
Les réexports dun module interne utilisent `self::`, ne sont jamais groupés, ne changent
jamais le nom du symbole avec `as` et possèdent une rustdoc adjacente. Un bloc homogène de
`pub use` ou `pub(crate) use` ne contient aucune ligne vide.
Laudit de complétude suit les réexports transitifs à travers les façades privées. Il vérifie
donc quun type déclaré dans un sous-module atteint réellement la racine de sa crate sans
exiger un faux accès public au module qui le contient. Les constantes de suivi des scaffolds
de migration restent internes à leur inventaire et ne font pas partie de lAPI publique.
## Nomenclature de `kb-lib`
| Famille | Constante | Type ou trait | Fonction libre |
|---------------|-----------|---------------|-----------------|
| Décodeur | `DC_` | `Dc` | `decoder_` |
| Matérialiseur | `MT_` | `Mt` | `materializer_` |
| Exécuteur | `EX_` | `Ex` | `executor_` |
| Modèle | `MD_` | `Md` | `model_` |
Les méthodes inhérentes et les helpers strictement privés ne sont pas soumis à un préfixe
global. Les symboles `pub` et `pub(crate)` le sont, car ils peuvent entrer en collision après
la fusion des anciennes crates dans `kb-lib`.
Les 98 frontières de décodeurs encore en attente utilisent des constantes uniques
`DC_<FAMILLE>_<SURFACE>_LEGACY_CRATE` et
`DC_<FAMILLE>_<SURFACE>_MIGRATION_STATUS`. Elles sont référencées par un inventaire interne
pour que `cargo check` ne produise pas davertissements de code mort.
## Tracing
Une crate opérationnelle autonome garde un unique `TRACING_TARGET` dans `constants.rs` et le
réexporte avec :
```rust
pub(crate) use self::constants::TRACING_TARGET;
```
Un composant opérationnel de `kb-lib` utilise un nom préfixé, par exemple
`TRACING_TARGET_DECODER_SPL_TOKEN2022` ou `TRACING_TARGET_MATERIALIZER_TOKEN_ACCOUNTS`, réexporté
transitivement jusquà `kb-lib/src/lib.rs`. Sa valeur suit exactement le chemin hiérarchique
du composant, par exemple `kb-lib.decoder.spl.token2022`.
## Validation
Laudit strict exige le `Cargo.lock` versionné de lapplication et vérifie exclusivement :
```text
wincode 0.5.5
solana-wincode-varint 1.0.0
```
Une livraison sans `Cargo.lock` peut contrôler le reste avec `--report-only`, mais elle ne
doit pas annoncer laudit strict comme propre tant que le lock réel na pas été utilisé.
La fermeture dune tranche demande ensuite :
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo test --workspace
cargo clippy --workspace --all-targets
```