176 lines
8.1 KiB
Markdown
176 lines
8.1 KiB
Markdown
<!-- file: deltas/0.0.5/alpha.7.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.0.5-alpha.7 — profil Rust strict, chemins et nomenclature explicite
|
|
|
|
## Baseline et version
|
|
|
|
Baseline attendue : commit opérateur complet de `0.0.5-alpha.6.fix.3`, réalisé après application de `history/0.0.5/alpha.6.fix.3.md` avec statut `PASS`.
|
|
|
|
Version après application :
|
|
|
|
```text
|
|
0.0.5-alpha.7
|
|
```
|
|
|
|
## Motif
|
|
|
|
La réconciliation Tauri a confirmé qu'un host contrôlé hérite du profil Rust au lieu de redéfinir ses conventions. La relecture des règles autoritaires KSP/Games révèle alors un écart PGR plus ancien : la conception initiale avait retenu un profil de forte explicité, mais `510-RUST_CARGO.md` matérialisé conservait encore une politique permissive sur les `use` non-traits et ne formalisait pas la nomenclature des crates.
|
|
|
|
KSP `RULES_RUST.md` version `10` fournit la référence stricte : Rust 2024, `use` réservé aux traits, chemins externes publics explicites et courts, réexports internes `self::`, façade crate-root, `crate::Item`, absence d'alias/globs et contrôle de flux explicite. Games `RULES_RUST.md` version `7` confirme le noyau Rust 2024/façade/erreurs mais reste plus léger sur certains imports et règles de forme. `alpha.7` retient donc le profil strict comme défaut des **nouvelles baselines contrôlées** tout en conservant des overrides explicites pour les projets externes ou historiques.
|
|
|
|
## Scope
|
|
|
|
REPLACE :
|
|
|
|
```text
|
|
VERSION
|
|
docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
|
|
docs/rules/510-RUST_CARGO.md
|
|
docs/skeletons/002-RUST_CARGO_WORKSPACE.md
|
|
docs/studies/001-KSP_GAMES_RECONCILIATION.md
|
|
docs/templates/002-CARGO_MANIFESTS.md
|
|
```
|
|
|
|
ADD :
|
|
|
|
```text
|
|
deltas/0.0.5/alpha.7.md
|
|
```
|
|
|
|
DELETE : aucun.
|
|
|
|
## Décisions
|
|
|
|
Pour une nouvelle baseline Rust contrôlée :
|
|
|
|
- Rust 2024 devient la baseline normative actuelle ; une contrainte externe doit être documentée explicitement ;
|
|
- `use` est réservé aux traits qui doivent réellement être mis en scope ; les autres symboles sont appelés par chemins explicites ;
|
|
- un symbole externe utilise le chemin public le plus court exposé par sa crate ;
|
|
- les réexports internes utilisent `self::`, restent explicites ligne par ligne et ne masquent pas les collisions par alias ;
|
|
- les glob imports, regroupements par accolades de façade et imports non-traits de commodité sont interdits ;
|
|
- les modules d'implémentation restent privés ; les items partagés passent par la façade crate-root et `crate::Item`, y compris dans leur module propriétaire ;
|
|
- `pub(super)`/`pub(in ...)` ne remplacent pas cette façade dans une baseline contrôlée ;
|
|
- tout `pub`/`pub(crate)` et tout réexport crate-root porte une rustdoc utile ;
|
|
- `unwrap`, `expect` et `?` sont interdits en production dans le profil strict ; la propagation d'erreur et les retours restent explicites.
|
|
|
|
Le marqueur historique KSP `rust-rules: trait-import` n'est pas généralisé : il appartient à l'enforcement local, pas à la règle sémantique.
|
|
|
|
Pour la nomenclature des crates d'un nouveau projet contrôlé :
|
|
|
|
```text
|
|
<project>-<responsibility>-<role-or-target>
|
|
```
|
|
|
|
est la forme recommandée. Le préfixe projet/abréviation est obligatoire ; le classificateur (`lib`, `api`, `worker`, `job`, `cli`, `desk`, `desktop`, `tauri`, `wasm`, `server`, etc.) est utilisé lorsqu'il apporte une information réelle. Le vocabulaire exact reste local, aucun suffixe n'est ajouté par symétrie et aucun projet historique n'est renommé rétroactivement uniquement pour adopter cette grammaire.
|
|
|
|
Le skeleton Rust/Cargo et le guide des manifests adoptent ces choix pour les futures baselines contrôlées. L'audit de façade déjà livré devient une sélection recommandée du skeleton strict ; l'adoption d'un projet existant commence toujours en `--report-only`.
|
|
|
|
## Hors scope
|
|
|
|
Cette tranche ne modifie pas les règles de blocs homogènes, ordre alphabétique, espacement, regroupement par visibilité ou organisation structurelle des items : elles restent réservées à `alpha.8` avec leurs audits monotâches.
|
|
|
|
Elle n'importe pas `audit_rust_general_rules.py` depuis KSP/Games, ne crée aucun parser Rust général et ne modifie pas le skeleton Tauri prévu en `alpha.9`.
|
|
|
|
## Validation opérateur
|
|
|
|
Après application du history `PASS` de `alpha.6.fix.3`, commit/push de cette tranche, puis application du présent delta :
|
|
|
|
```bash
|
|
test "$(cat VERSION)" = '0.0.5-alpha.7'
|
|
test -f history/0.0.5/alpha.6.fix.3.md
|
|
test -f deltas/0.0.5/alpha.7.md
|
|
test ! -e history/0.0.5/alpha.7.md
|
|
|
|
grep -A2 '^## Statut$' history/0.0.5/alpha.6.fix.3.md | grep -Fx 'PASS'
|
|
grep -Fx '<!-- version: 5 -->' docs/rules/510-RUST_CARGO.md
|
|
grep -Fx '<!-- version: 3 -->' docs/skeletons/002-RUST_CARGO_WORKSPACE.md
|
|
grep -Fx '<!-- version: 2 -->' docs/templates/002-CARGO_MANIFESTS.md
|
|
grep -Fx '<!-- version: 8 -->' docs/studies/001-KSP_GAMES_RECONCILIATION.md
|
|
grep -Fx '<!-- version: 9 -->' docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
|
|
|
|
python3 -B -m unittest discover -s tests -v
|
|
|
|
python3 -B scripts/audit_markdown_headers.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
python3 -B scripts/audit_markdown_tables.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
python3 -B scripts/audit_markdown_links.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
|
|
python3 -B - <<'PY'
|
|
from pathlib import Path
|
|
import re
|
|
|
|
history = Path("history/0.0.5/alpha.6.fix.3.md").read_text(encoding="utf-8")
|
|
assert re.search(r"## Statut\s+PASS\s", history)
|
|
|
|
rules = Path("docs/rules/510-RUST_CARGO.md").read_text(encoding="utf-8")
|
|
for phrase in (
|
|
"nouveau projet Rust contrôlé MUST utiliser l'édition Rust 2024",
|
|
"### Nomenclature des crates dans un projet contrôlé",
|
|
"<project>-<responsibility>-<role-or-target>",
|
|
"### `use` réservé aux traits",
|
|
"le code utilise directement le **chemin public le plus court**",
|
|
"Les réexports d'éléments internes commencent par `self::`",
|
|
"toute référence dans la même crate MUST utiliser `crate::Item`",
|
|
"`unwrap()` et `expect()` MUST NOT être utilisés",
|
|
"l'opérateur `?` MUST NOT être utilisé",
|
|
):
|
|
assert phrase in rules, phrase
|
|
|
|
for forbidden in (
|
|
"PGR ne généralise pas l'interdiction KSP plus stricte de tous les `use` non-traits",
|
|
"le profil de façade crate-root est seulement facultatif pour une nouvelle baseline contrôlée",
|
|
):
|
|
assert forbidden not in rules, forbidden
|
|
|
|
skeleton = Path("docs/skeletons/002-RUST_CARGO_WORKSPACE.md").read_text(encoding="utf-8")
|
|
for phrase in (
|
|
"nom court/abréviation canonique du projet",
|
|
"édition Rust 2024",
|
|
"façade crate-root et les chemins explicites sont sélectionnés par défaut",
|
|
"audit_rust_export_completeness.py",
|
|
):
|
|
assert phrase in skeleton, phrase
|
|
|
|
study = Path("docs/studies/001-KSP_GAMES_RECONCILIATION.md").read_text(encoding="utf-8")
|
|
assert "#### Décision `alpha.7` — profil Rust strict et nomenclature" in study
|
|
assert "KSP `RULES_RUST.md` version `10`" in study
|
|
assert "Games `RULES_RUST.md` version `7`" in study
|
|
assert "Les règles de blocs homogènes" in study
|
|
|
|
plan = Path("docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md").read_text(encoding="utf-8")
|
|
assert "La réconciliation des règles versionnées KSP/Games retient KSP comme référence stricte" in plan
|
|
assert "### alpha.8 — formatage Rust structurel et audits monotâches" in plan
|
|
assert "### alpha.9 — décision de skeleton Tauri pour projets contrôlés" in plan
|
|
|
|
print("0.0.5 alpha.7 strict Rust profile audit: clean (explicit paths, crate-root facade, controlled naming, alpha.8 formatting deferred)")
|
|
PY
|
|
|
|
git diff --check
|
|
|
|
git add VERSION \
|
|
docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md \
|
|
docs/rules/510-RUST_CARGO.md \
|
|
docs/skeletons/002-RUST_CARGO_WORKSPACE.md \
|
|
docs/studies/001-KSP_GAMES_RECONCILIATION.md \
|
|
docs/templates/002-CARGO_MANIFESTS.md \
|
|
deltas/0.0.5/alpha.7.md
|
|
|
|
git diff --cached --check
|
|
git status --short
|
|
```
|
|
|
|
La sortie Git attendue avant ajout du history est exactement :
|
|
|
|
```text
|
|
M VERSION
|
|
A deltas/0.0.5/alpha.7.md
|
|
M docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
|
|
M docs/rules/510-RUST_CARGO.md
|
|
M docs/skeletons/002-RUST_CARGO_WORKSPACE.md
|
|
M docs/studies/001-KSP_GAMES_RECONCILIATION.md
|
|
M docs/templates/002-CARGO_MANIFESTS.md
|
|
```
|