0.0.5-alpha.7.fix.1
This commit is contained in:
186
deltas/0.0.5/alpha.7.fix.1.md
Normal file
186
deltas/0.0.5/alpha.7.fix.1.md
Normal file
@@ -0,0 +1,186 @@
|
||||
<!-- file: deltas/0.0.5/alpha.7.fix.1.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.0.5-alpha.7.fix.1 — contrats de suffixes, packaging Rust et tracing
|
||||
|
||||
## Baseline et version
|
||||
|
||||
Baseline attendue : commit opérateur complet de `0.0.5-alpha.7`, réalisé après application de `history/0.0.5/alpha.7.md` avec statut `FAIL`.
|
||||
|
||||
Version après application :
|
||||
|
||||
```text
|
||||
0.0.5-alpha.7.fix.1
|
||||
```
|
||||
|
||||
## Motif
|
||||
|
||||
La gate mécanique de `alpha.7` est propre, mais la revue fonctionnelle opérateur révèle que la nomenclature livrée reste trop descriptive. Dans les projets contrôlés, les suffixes doivent également porter un contrat architectural : `-api` désigne une frontière de contrats réellement justifiée, `-lib` une implémentation/fonctionnalité réutilisable, tandis que les exécutables restent normalement des packages distincts et minces.
|
||||
|
||||
La relecture ciblée des corpus confirme plusieurs éléments réutilisables :
|
||||
|
||||
- KSP distingue explicitement `ksp-<domain>-api` et `ksp-<role>-lib`, interdit une crate `*-api` créée uniquement par symétrie et garde les APIs purement déclaratives sans logging runtime ;
|
||||
- Games sépare explicitement la crate lib de jeu et ses launchers ;
|
||||
- KSP et Games convergent sur `tracing`, la composition du subscriber et une crate transverse de logging ;
|
||||
- les six hosts Tauri KSP et les deux hosts Tauri Games observés utilisent tous un package mixte lib/bin avec des noms de targets distincts.
|
||||
|
||||
Une ancienne règle KSP préférait un package worker mixte lib/bin. Cette préférence n'est pas généralisée : la décision PGR actuelle est la séparation par défaut, Tauri restant l'exception framework explicitement reconnue.
|
||||
|
||||
## Scope
|
||||
|
||||
REPLACE :
|
||||
|
||||
```text
|
||||
VERSION
|
||||
docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
|
||||
docs/rules/510-RUST_CARGO.md
|
||||
docs/rules/710-TAURI.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.fix.1.md
|
||||
```
|
||||
|
||||
DELETE : aucun.
|
||||
|
||||
## Décisions
|
||||
|
||||
Pour une nouvelle baseline Rust contrôlée :
|
||||
|
||||
- `-api` signifie contrat extensible/passif ; une crate `-api` n'est créée que si une séparation réelle est justifiée par extension, backend, lifecycle, implémentations multiples ou implémentation externe ;
|
||||
- une crate `-api` purement déclarative reste normalement sans logging/tracing runtime ;
|
||||
- lorsqu'une seule implémentation est utile et qu'aucune frontière séparée n'apporte de valeur, une seule crate `-lib` est préférée ;
|
||||
- `-lib` signifie implémentation ou fonctionnalité réutilisable et ne contient normalement pas de cible binaire ;
|
||||
- hors exception explicite de framework/plateforme, une bibliothèque réutilisable et son exécutable sont des packages Cargo distincts ;
|
||||
- l'exécutable porte un rôle lisible lorsqu'il existe (`cli`, `desk`, `worker`, `job`, `server`, etc.), dépend des libs nécessaires et conserve `main.rs` comme couche de bootstrap/composition mince ;
|
||||
- Tauri reste l'exception framework actuelle au package séparé lib/bin ; son profil impose alors des noms de targets réellement distincts, y compris après normalisation Cargo `-` -> `_`.
|
||||
|
||||
Pour les diagnostics :
|
||||
|
||||
- `tracing` est le mécanisme recommandé pour les nouveaux projets Rust contrôlés ;
|
||||
- `log` reste acceptable comme bridge de compatibilité mais n'est pas la façade par défaut sans contrainte externe ;
|
||||
- lorsqu'un workspace possède plusieurs runtimes partageant subscriber, filtres, sinks ou lifecycle, une crate transverse de logging/tracing SHOULD centraliser cette responsabilité ;
|
||||
- `tracing-subscriber` et `tracing-appender` appartiennent normalement à cet owner de composition ;
|
||||
- une bibliothèque métier/technique peut émettre des événements mais ne configure pas silencieusement le subscriber global.
|
||||
|
||||
## Hors scope
|
||||
|
||||
Ce correctif ne traite toujours pas l'ordre des blocs, le regroupement par visibilité, l'espacement interne, l'ordre alphabétique des items ou les audits de forme : ces sujets restent réservés à `alpha.8`.
|
||||
|
||||
Il ne crée aucun nouvel audit Python et ne transforme pas le profil Rust en catalogue exhaustif de suffixes. Les vocabulaires métier exacts restent locaux.
|
||||
|
||||
## Validation opérateur
|
||||
|
||||
Après application du history `FAIL` de `alpha.7`, commit/push de cette tranche, puis application du présent delta :
|
||||
|
||||
```bash
|
||||
test "$(cat VERSION)" = '0.0.5-alpha.7.fix.1'
|
||||
test -f history/0.0.5/alpha.7.md
|
||||
test -f deltas/0.0.5/alpha.7.fix.1.md
|
||||
test ! -e history/0.0.5/alpha.7.fix.1.md
|
||||
|
||||
grep -A2 '^## Statut$' history/0.0.5/alpha.7.md | grep -Fx 'FAIL'
|
||||
grep -Fx '<!-- version: 6 -->' docs/rules/510-RUST_CARGO.md
|
||||
grep -Fx '<!-- version: 5 -->' docs/rules/710-TAURI.md
|
||||
grep -Fx '<!-- version: 4 -->' docs/skeletons/002-RUST_CARGO_WORKSPACE.md
|
||||
grep -Fx '<!-- version: 3 -->' docs/templates/002-CARGO_MANIFESTS.md
|
||||
grep -Fx '<!-- version: 9 -->' docs/studies/001-KSP_GAMES_RECONCILIATION.md
|
||||
grep -Fx '<!-- version: 10 -->' 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.7.md").read_text(encoding="utf-8")
|
||||
assert re.search(r"## Statut\s+FAIL\s", history)
|
||||
|
||||
rules = Path("docs/rules/510-RUST_CARGO.md").read_text(encoding="utf-8")
|
||||
for phrase in (
|
||||
"### Les suffixes portent un contrat architectural",
|
||||
"Une crate `-api` MUST NOT être créée uniquement pour obtenir une paire de noms symétrique.",
|
||||
"Lorsqu'une seule implémentation est réellement prévue",
|
||||
"### Séparation bibliothèques / exécutables",
|
||||
"Tauri constitue l'exception framework actuellement reconnue par PGR",
|
||||
"## Diagnostics structurés et ownership du logging",
|
||||
"`tracing` est le mécanisme recommandé",
|
||||
"SHOULD NOT installer silencieusement un subscriber global",
|
||||
):
|
||||
assert phrase in rules, phrase
|
||||
|
||||
tauri = Path("docs/rules/710-TAURI.md").read_text(encoding="utf-8")
|
||||
for phrase in (
|
||||
"le package mixte `lib + bin` constitue l'exception framework explicite",
|
||||
"leurs noms MUST être distincts même après la normalisation Cargo usuelle des tirets en underscores",
|
||||
"project_feature_desk_lib",
|
||||
"Un plugin Tauri de tracing sert alors d'adapter",
|
||||
):
|
||||
assert phrase in tauri, phrase
|
||||
|
||||
skeleton = Path("docs/skeletons/002-RUST_CARGO_WORKSPACE.md").read_text(encoding="utf-8")
|
||||
for phrase in (
|
||||
"les frontières `-api` / `-lib` réellement justifiées",
|
||||
"Les exécutables sont des packages distincts des bibliothèques",
|
||||
"crate transverse de logging/tracing",
|
||||
):
|
||||
assert phrase in skeleton, phrase
|
||||
|
||||
template = Path("docs/templates/002-CARGO_MANIFESTS.md").read_text(encoding="utf-8")
|
||||
assert "une bibliothèque réutilisable et son exécutable sont normalement deux packages Cargo distincts" in template
|
||||
assert "Tauri est une exception framework" in template
|
||||
|
||||
study = Path("docs/studies/001-KSP_GAMES_RECONCILIATION.md").read_text(encoding="utf-8")
|
||||
for phrase in (
|
||||
"#### Correction `alpha.7.fix.1` — suffixes, packaging et tracing",
|
||||
"KSP-WORKER-014",
|
||||
"les `6` hosts Tauri KSP `0.3.16` et les `2` hosts Tauri Games `0.3.5`",
|
||||
"PGR retient donc `tracing` par défaut",
|
||||
):
|
||||
assert phrase in study, phrase
|
||||
|
||||
plan = Path("docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md").read_text(encoding="utf-8")
|
||||
assert "`alpha.7.fix.1` complète donc la tranche" in plan
|
||||
assert "### alpha.8 — formatage Rust structurel et audits monotâches" in plan
|
||||
|
||||
print("0.0.5 alpha.7.fix.1 crate contract audit: clean (api/lib semantics, binary split, tracing owner, Tauri exception)")
|
||||
PY
|
||||
|
||||
git diff --check
|
||||
|
||||
git add VERSION \
|
||||
docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md \
|
||||
docs/rules/510-RUST_CARGO.md docs/rules/710-TAURI.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.fix.1.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.fix.1.md
|
||||
M docs/plans/005-V0_0_5_RECONCILIATION_PLAN.md
|
||||
M docs/rules/510-RUST_CARGO.md
|
||||
M docs/rules/710-TAURI.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