106 lines
3.8 KiB
Markdown
106 lines
3.8 KiB
Markdown
<!-- file: history/0.0.5/alpha.5.md -->
|
||
<!-- version: 1 -->
|
||
|
||
# History 0.0.5-alpha.5 — audit Rust de façade/export completeness
|
||
|
||
## Statut
|
||
|
||
FAIL
|
||
|
||
La gate mécanique de `0.0.5-alpha.5` exécutée le `2026-09-25` est propre, mais la revue fonctionnelle qui suit révèle que le contrat livré est incomplet par rapport à la convention Rust que PGR doit pouvoir porter : l'audit détecte `crate::module::Item`, mais ne détecte pas les références non qualifiées ou autrement non canoniques à un item partagé déjà exposé au crate-root, notamment dans son propre module de déclaration.
|
||
|
||
Le statut global reste donc `FAIL`. Les résultats mécaniques ne sont pas annulés ; ils prouvent que l'implémentation livrée fonctionne selon son contrat écrit, tandis que la revue révèle que ce contrat est trop faible.
|
||
|
||
## Baseline et version
|
||
|
||
La tranche part du commit opérateur de `0.0.5-alpha.4` :
|
||
|
||
```text
|
||
defc9ca 0.0.5-alpha.4
|
||
```
|
||
|
||
Le push vers `origin/master` a réussi avant l'application de `alpha.5`.
|
||
|
||
La version contrôlée après application du delta est :
|
||
|
||
```text
|
||
0.0.5-alpha.5
|
||
```
|
||
|
||
`history/0.0.5/alpha.4.md`, `deltas/0.0.5/alpha.5.md`, `scripts/audit_rust_export_completeness.py`, `tests/test_rust_export_completeness.py` et `docs/validation/003-RUST_EXPORT_COMPLETENESS.md` sont présents. `history/0.0.5/alpha.5.md` était absent pendant la gate.
|
||
|
||
## Validation opérateur observée
|
||
|
||
L'opérateur a fourni les sorties du `2026-09-25` depuis `~/Projects/pgr`, à `00:03:49`–`00:08:36`.
|
||
|
||
Les contrôles de présence, statut et révision ont réussi. La suite ciblée a exécuté `9` tests, tous réussis :
|
||
|
||
```text
|
||
Ran 9 tests in 0.161s
|
||
|
||
OK
|
||
```
|
||
|
||
La suite Python globale a exécuté `28` tests, tous réussis :
|
||
|
||
```text
|
||
Ran 28 tests in 0.468s
|
||
|
||
OK
|
||
```
|
||
|
||
Les audits documentaires affichent :
|
||
|
||
```text
|
||
Markdown header audit: clean (140 file(s))
|
||
Markdown table audit: clean (6 table(s), 140 file(s))
|
||
Markdown link audit: clean (137 local link(s), 140 file(s))
|
||
```
|
||
|
||
Le contrôle structurel de la tranche affiche :
|
||
|
||
```text
|
||
0.0.5 alpha.5 Rust façade audit: clean (recursive crate discovery, narrow ownership, regression coverage)
|
||
```
|
||
|
||
`git diff --check` et `git diff --cached --check` n'ont produit aucun diagnostic. Le scope Git observé est exactement celui du delta `alpha.5`.
|
||
|
||
## Défaut fonctionnel découvert après la gate
|
||
|
||
La convention recherchée est plus stricte que le contrat implémenté : lorsqu'un item `pub` ou `pub(crate)` est partagé et exposé par la façade crate-root, ses références intra-crate doivent utiliser le chemin canonique `crate::Item`, y compris depuis le module propriétaire.
|
||
|
||
Le script `version: 1` détecte seulement le sous-cas :
|
||
|
||
```text
|
||
crate::module::Item
|
||
```
|
||
|
||
lorsque `crate::Item` existe déjà. Il laisse notamment passer :
|
||
|
||
```text
|
||
Item
|
||
self::Item
|
||
super::Item
|
||
module::Item
|
||
```
|
||
|
||
ainsi que les noms nus dans des signatures, `impl`, constructeurs ou appels situés dans le module de déclaration. Le compilateur et Clippy ne possèdent pas cette convention de style/architecture : une seule consommation correcte par `crate::Item` peut suffire à rendre le réexport utilisé sans révéler les autres accès non canoniques.
|
||
|
||
Ce manque est dans le scope exact de `alpha.5`; il doit donc être corrigé par `alpha.5.fix.1`, sans commencer Tauri.
|
||
|
||
## Résultat
|
||
|
||
`0.0.5-alpha.5` est enregistré `FAIL` malgré une gate mécanique verte, car l'acceptation fonctionnelle de l'audit est incomplète.
|
||
|
||
## Transition
|
||
|
||
Appliquer le présent history puis committer/pousser `0.0.5-alpha.5`.
|
||
|
||
La correction suivante est :
|
||
|
||
```text
|
||
0.0.5-alpha.5.fix.1
|
||
```
|
||
|
||
Elle doit étendre l'audit de façade pour imposer réellement la forme canonique intra-crate `crate::Item` aux items partagés, ajouter les régressions correspondantes et corriger la documentation/mesure de réconciliation. Aucun scope Tauri ne doit être absorbé.
|