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

6.5 KiB

Delta 0.0.2-alpha.3 — premier profil Rust / Cargo

Baseline

Version attendue avant application :

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 :

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 :

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 :

VERSION
RULES.md
docs/rules/000-README.md

ADD :

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

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 :

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.