0.0.5-alpha.7
This commit is contained in:
175
deltas/0.0.5/alpha.7.md
Normal file
175
deltas/0.0.5/alpha.7.md
Normal file
@@ -0,0 +1,175 @@
|
||||
<!-- 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
|
||||
```
|
||||
Reference in New Issue
Block a user