Files
pgr/deltas/0.0.2/alpha.3.md
2026-09-23 11:35:41 +02:00

167 lines
6.5 KiB
Markdown

<!-- file: deltas/0.0.2/alpha.3.md -->
<!-- version: 1 -->
# 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.