# Delta 0.0.2-alpha.3 — premier profil Rust / Cargo ## Baseline Version attendue avant application : ```text 0.0.2-alpha.2 ``` Le history `history/0.0.2/alpha.2.md` MUST avoir été appliqué et committé avant ce delta. Version après application : ```text 0.0.2-alpha.3 ``` ## Objet Matérialiser le premier profil technologique réel de PGR : `Rust / Cargo`. Cette tranche sert aussi de point de mesure prévu par le plan `0.0.2`. Elle doit consolider uniquement les règles Rust/Cargo suffisamment générales pour être réutilisables, sans recopier les particularités métier ou les micro-conventions propres à KSP ou `sasedev-games`. ## Réconciliation des corpus sources Les deux corpus historiques de référence convergent notamment sur : - l'utilisation d'un workspace Cargo structuré ; - la centralisation des métadonnées/lints et des dépendances réellement partagées ; - l'activation locale des features selon le besoin de la crate ; - une politique Rust stricte autour de `unsafe`, `unwrap`, `expect`, retours explicites et Clippy ; - une façade de crate explicite plutôt qu'une exposition accidentelle des modules internes ; - `rustfmt.toml` comme propriétaire du formatage ; - la séparation des tests unitaires et d'intégration ; - une gate `fmt` / audit applicable / `check` / `clippy`, avec tests ciblés par défaut et tests workspace aux gates larges ; - l'absence d'exécution opportuniste de `cargo update`, `cargo tree`, `cargo build` ou `cargo clean` sans besoin correspondant. La consolidation ne promeut pas automatiquement les divergences ou conventions trop spécifiques : - l'interdiction KSP de tous les imports `use` non-traits n'est pas élevée au profil Rust général ; - les micro-règles KSP de lignes vides/ordre interne ne remplacent pas `rustfmt` au niveau PGR ; - aucune dépendance, crate, version de bibliothèque ou règle Solana/games n'est reprise ; - la politique historique commune d'ignorer `Cargo.lock` n'est pas rendue universelle : le profil exige une politique explicite selon le type de produit ; - l'exception `unsafe` Android/JNI de games reste un exemple de spécialisation FFI locale et non une permission Rust générale ; - le chemin externe des artefacts Cargo n'est pas figé avant les futures règles de skeleton/layout. ## Profil créé Le nouveau propriétaire normatif est : ```text docs/rules/510-RUST_CARGO.md ``` Il couvre : - toolchain et édition ; - workspace et unités de release ; - manifests, dépendances et features ; - politique explicite de `Cargo.lock` ; - lints communs et safety ; - API, visibilité et rustdoc ; - contrôle de flux/erreurs du profil strict ; - `rustfmt.toml` ; - `.cargo/config.toml` et artefacts générés ; - organisation des tests ; - commandes de validation Rust/Cargo ; - stratégie future d'audits Rust monotâches. Aucun script Rust supplémentaire n'est créé dans cette tranche. PGR ne possède actuellement aucun workspace Rust réel à auditer ; introduire maintenant une copie simplifiée des auditeurs games/KSP créerait une gate sans sujet réel. Le premier audit PGR déjà matérialisé reste l'audit Markdown monotâche introduit lorsque son besoin a été observé. ## Scope REPLACE : ```text VERSION RULES.md docs/rules/000-README.md ``` ADD : ```text docs/rules/510-RUST_CARGO.md deltas/0.0.2/alpha.3.md ``` DELETE : aucun. Aucun manifest de suppression n'est nécessaire. ## Validation opérateur ```bash test "$(cat VERSION)" = "0.0.2-alpha.3" test -f docs/rules/510-RUST_CARGO.md test -f deltas/0.0.2/alpha.3.md grep -F 'PGR MUST NOT imposer un pin exact de toolchain uniquement parce qu' docs/rules/510-RUST_CARGO.md grep -F 'le fichier PGR `VERSION` reste la version canonique de l' docs/rules/510-RUST_CARGO.md grep -F 'Une crate membre SHOULD consommer cette dépendance avec `workspace = true`' docs/rules/510-RUST_CARGO.md grep -F 'PGR ne généralise pas automatiquement la politique de lockfile' docs/rules/510-RUST_CARGO.md grep -F 'unsafe_code = "forbid"' docs/rules/510-RUST_CARGO.md grep -F 'PGR ne généralise pas l'"'"'interdiction KSP plus stricte de tous les `use` non-traits' docs/rules/510-RUST_CARGO.md grep -F 'cargo clippy --workspace --all-targets --all-features -- -D warnings' docs/rules/510-RUST_CARGO.md grep -F 'PGR SHOULD préférer plusieurs audits monotâches et lisibles' docs/rules/510-RUST_CARGO.md grep -F '510-RUST_CARGO.md' RULES.md grep -F '510-RUST_CARGO.md' docs/rules/000-README.md python3 -B scripts/audit_markdown_tables.py \ README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts git diff --check git add VERSION RULES.md \ docs/rules/000-README.md \ docs/rules/510-RUST_CARGO.md \ deltas/0.0.2/alpha.3.md git diff --cached --check git status --short ``` La sortie attendue avant ajout du history est : ```text M RULES.md M VERSION A deltas/0.0.2/alpha.3.md M docs/rules/000-README.md A docs/rules/510-RUST_CARGO.md ``` Revue opérateur complémentaire : - confirmer que le profil distingue bien les règles Rust/Cargo générales des conventions strictement KSP ou games ; - confirmer que la politique de lockfile reste explicitement project-type-specific et n'est pas généralisée uniquement parce que les deux corpus historiques ignoraient `Cargo.lock` ; - confirmer que les contraintes FFI/plateforme restent des overrides locaux ; - confirmer qu'aucune version de crate ou de toolchain historique n'a été recopiée comme pin universel ; - confirmer qu'aucun audit Rust complexe n'a été ajouté avant d'avoir un sujet réel et une propriété mono-responsabilité à contrôler. ## Point de mesure / REPLAN `alpha.3` est le point de mesure explicite prévu par le plan. Le profil Rust/Cargo tient dans une tranche documentaire autonome sans nécessiter de famille supplémentaire, de script d'audit complexe ou de sous-profil framework/plateforme. Le forecast `alpha.4 — Java / Maven / Gradle` reste donc raisonnable à ce stade. Si la validation de cette tranche révèle au contraire une dérive importante du modèle ou plusieurs corrections substantielles, effectuer un REPLAN avant `alpha.4` plutôt que poursuivre mécaniquement. ## Transition ### PASS Créer et appliquer séparément `history/0.0.2/alpha.3.md`, committer la tranche, puis préparer `0.0.2-alpha.4` consacré à `Java / Maven / Gradle`. ### FAIL Rester dans `0.0.2-alpha.3.fix.M` tant que le premier profil réel ne respecte pas le modèle `alpha.2`. Un défaut de dimensionnement significatif peut déclencher un REPLAN avant toute tranche Java.