Files
khadhroony-solana-project/deltas/0.2.5/pre.010-fix.001.md

388 lines
12 KiB
Markdown

<!-- file: deltas/0.2.5/pre.010-fix.001.md -->
<!-- version: 1 -->
# Delta `0.2.5-pre.010-fix.001` — Dalek 3 + normalisation Rust workspace + prompt `0.2.6`
## 1. Base et statut
Base opérateur autoritaire :
```text
0.2.5-pre.010
archive complète modifiée fournie par l'opérateur le 2026-08-20
workspace.package.version = 0.2.5-pre.9
```
`pre.010` n'est **pas** suivi directement de `rel.001`. Ce fix rouvre volontairement le gate technique avant toute publication stable.
Version technique cible :
```text
workspace.package.version = 0.2.5-pre.10.fix.1
```
Identifiant de livraison :
```text
0.2.5-pre.010-fix.001
```
Commit attendu après validation :
```text
v0.2.5-pre.010-fix.001
```
Aucun tag stable n'est créé par ce fix.
## 2. Objectifs
Ce fix corrige trois écarts distincts avant la stable :
1. mettre la dépendance KSP directe `ed25519-dalek` sur la génération stable `3.0` ;
2. normaliser **tout le workspace Rust actuel**, pas seulement `ksp-wallet-lib`, selon les conventions KSP qui ne sont pas couvertes par `rustfmt`/Clippy ;
3. renforcer le prompt d'ouverture `0.2.6` afin qu'une nouvelle session récupère de manière autonome les règles, le gate `pre.001`, le forecast souple et le workflow de validation sans dépendre d'une mémoire implicite.
Ce fix ne modifie pas le wire `.kspwallet` V1, les algorithmes cryptographiques retenus, les tailles/paramètres sérialisés ni le threat model Wallet.
## 3. `ed25519-dalek 3.0.0`
La dépendance workspace KSP devient :
```toml
ed25519-dalek = { version = "^3.0", default-features = false }
```
Le manifest Wallet conserve les features locales réellement consommées :
```toml
ed25519-dalek = { workspace = true, features = ["signature", "zeroize"] }
```
Le réaudit primaire effectué pendant la préparation confirme pour `ed25519-dalek 3.0.0` :
```text
release 2026-07-06
Rust edition 2024
MSRV 1.85
signature feature explicite disponible
zeroize feature explicite disponible
SigningKey API actuelle
VerifyingKey API actuelle
Signer trait actuel
Signature API actuelle
```
`ksp-wallet-lib` n'utilise pas les features par défaut ; il conserve donc uniquement `signature` + `zeroize`, sans activer `fast` implicitement.
### Coexistence Dalek 3.x / 2.x
`solana-keypair 3.1.2` dépend encore officiellement de :
```text
ed25519-dalek ^2.1.1
```
Le tree attendu après ce fix comporte donc **deux générations Dalek légitimes** :
```text
ed25519-dalek 3.0.0 <- dépendance KSP directe de ksp-wallet-lib
ed25519-dalek 2.2.x <- solana-keypair 3.1.2 <- ksp-wallet-lib
```
Il ne faut pas forcer leur unification en contournant les contraintes upstream. La convergence `solana-address` reste à confirmer par le tree opérateur.
## 4. Normalisation Rust workspace-wide
La base opérateur a été auditée avec le nouvel outil en mode report-only avant normalisation. Résultat initial :
```text
General Rust rule audit: 552 violation(s)
RUST-DOC-101: 130
RUST-DOC-102: 79
RUST-FMT-101: 150
RUST-FMT-102: 8
RUST-FMT-104: 58
RUST-FMT-105: 49
RUST-FMT-106: 1
RUST-FMT-107: 47
RUST-IMPORT-101: 29
RUST-IMPORT-104: 1
Rust export completeness audit: 50 candidate(s)
RUST-API-201: 38
RUST-IMPORT-201: 12
KSP workspace Rust rule audit: clean
```
Après normalisation de l'arbre cible :
```text
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
```
### Conventions désormais normalisées
Le fix applique notamment :
```text
use uniquement pour traits réellement nécessaires
marqueur canonique : // rust-rules: trait-import
aucun grouped import
aucun glob import
aucun alias use ... as ...
aucun extern crate ... as ...
use uniquement en tête de module, jamais dans une fonction/test
pub/pub(crate) partagé -> réexport crate-root
usage interne partagé -> crate::Item
super::Item réservé à un item strictement privé du parent dans un test séparé
pas de crate::module::Item pour un item visible et réexporté
rustdoc utile sur pub et pub(crate), champs/méthodes/reexports compris
pas de ligne vide à l'intérieur d'un corps fonction/méthode/struct/enum
blocs const ordonnés par visibilité puis nom lorsque l'ordre n'est pas sémantique
reexports pub puis pub(crate), ordonnés avec leur rustdoc/attributs
modules production avant modules test et ordre alphabétique lorsque possible
```
Les règles contextuelles qui ne peuvent pas être prouvées mécaniquement sans parser sémantique restent une responsabilité de revue humaine ; le script ne prétend pas remplacer `rustfmt`, Clippy, le compilateur ou les tests.
## 5. Nouveaux audits Python
Ajouts stdlib-only :
```text
scripts/audit_rust_general_rules.py
scripts/audit_rust_export_completeness.py
scripts/audit_ksp_workspace_rules.py
scripts/audit_rust_workspace_rules.py
```
Commande canonique :
```bash
python3 scripts/audit_rust_workspace_rules.py
```
Le wrapper exécute :
```text
general Rust structural audit
crate-root/export completeness audit
KSP workspace boundary audit
```
Le mode diagnostic existe également :
```bash
python3 scripts/audit_rust_workspace_rules.py --report-only
```
L'outil est volontairement un **audit**, pas un auto-formatter : les corrections restent explicites et reviewables.
## 6. Règles versionnées renforcées
### `docs/rules/RULES_RUST.md`
Formalise désormais les conventions qui étaient encore implicites ou incomplètement contrôlées :
- imports de traits seulement et marqueur canonique ;
- interdiction grouped/glob/alias et `extern crate ... as ...` ;
- imports au niveau module ;
- chemins internes les plus courts via crate-root ;
- `super::` seulement pour les privés ;
- complétude des réexports `pub(crate)` ;
- rustdoc sur toute visibilité KSP ;
- ordre/espacement des blocs ;
- validation Python obligatoire.
### `docs/rules/RULES_KSP.md`
Le workflow technique standard intègre l'audit Rust structurel après `cargo fmt` et avant compilation/Clippy.
### `docs/rules/PROMPT_STRUCTURE.md`
Un prompt de démarrage devient explicitement un **contrat opératoire autonome** avec :
- base exacte ;
- ordre de lecture obligatoire ;
- sources externes fraîches lorsque nécessaire ;
- première mission `pre.001` ;
- forecast souple visible ;
- version/delta/validation ;
- instruction d'ouverture ;
- interdiction de déclarer réussie une commande non exécutée.
## 7. Normalisation des façades et chemins internes
### `ksp-logging-lib`
L'ancien alias caché :
```text
pub extern crate tracing as __private_tracing
```
est remplacé par un bridge macro caché sous son nom canonique :
```text
#[doc(hidden)]
pub extern crate tracing
```
Les macros utilisent `$crate::tracing`. Le bridge reste réservé à l'hygiène des macros KSP et n'est pas une API autorisée aux autres crates ; l'audit KSP interdit `ksp_logging_lib::tracing::` côté consumer.
### `ksp-app-config-desk`
Les collisions de noms de réexports crate-root ont été résolues en renommant les **déclarations propriétaires**, pas par des alias de façade. Exemples :
```text
documents::inventory -> document_inventory
documents::detail -> document_detail
environment::report -> environment_report
logging_editor::document -> logging_document
logging_runtime::status -> logging_runtime_status
profiles::inventory -> profile_inventory
profiles::detail -> profile_detail
secrets::reveal -> reveal_secret
```
Les wrappers `#[tauri::command]` gardent leurs noms externes ; le contrat frontend Tauri n'est donc pas volontairement renommé.
### Autres crates
Les items `pub(crate)` réellement partagés sont réexportés par la racine de leur crate et leurs consumers utilisent `crate::Item`. Les tests séparés n'emploient plus `super::` pour des items visibles.
## 8. Prompt `0.2.6` renforcé
`prompts/011-V0_2_6_START_PROMPT.md` est réécrit comme prompt autonome de nouvelle session en reprenant les points qui étaient plus robustes dans les premiers prompts KSP et les workflows bot3 :
```text
base stable et priorité des sources de vérité
ordre de lecture obligatoire
première mission pre.001 audit/brainstorming/sizing avant UI lourde
baseline Rust + audit Python avant modification
forecast souple explicite et non contraignant
frontières Config/Wallet/Transport/Logging/Tauri
sécurité passwords/secrets/frontend
workflow Cargo/delta/fix/commit/tag
validation Tauri finale seulement en dernier
instruction d'ouverture explicite
```
Forecast initial exposé dès l'ouverture :
```text
pre.001 audit/sizing/UX/Config/bridge/security
pre.002 crate Tauri + frontend shell + logging + splash/main
pre.003 std.wallet + composite Wallet Desk + adapters Config
pre.004 inventory/selection + locked inspection + DTOs
pre.005 create/import + unlock VIEW/OWNER + lifecycle
pre.006 wallet details + balance HTTP + refresh/diagnostics
pre.007 metadata administration + rotations VIEW/OWNER
pre.008 strong VIEW disable/recreate + export OWNER + security UX
pre.009 integration tests + Devnet smoke + compliance/security review
pre.010 README/USAGE/build final + prompt suivant si nécessaire
rel.001 publication stable
```
Le prompt précise que ce forecast est ajustable et que la complétude prime toujours sur le numéro de prerelease.
## 9. Portée des fichiers Rust
La normalisation touche **83 fichiers Rust** dans les six crates actuelles :
```text
ksp-app-config-desk 19 fichiers
ksp-config-lib 11 fichiers
ksp-core-lib 2 fichiers
ksp-logging-lib 9 fichiers
ksp-onchain-transport-lib 18 fichiers
ksp-wallet-lib 24 fichiers
```
Chaque fichier Rust existant modifié consomme exactement une nouvelle version de fichier par rapport à la base opérateur fournie.
## 10. Documentation durable modifiée
```text
ROADMAP.md
docs/formats/KSPWALLET_V1.md
docs/plans/012-V0_2_5_WALLET_FOUNDATION_PLAN.md
docs/rules/PROMPT_STRUCTURE.md
docs/rules/RULES_KSP.md
docs/rules/RULES_RUST.md
docs/validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md
prompts/011-V0_2_6_START_PROMPT.md
```
Le plan et la matrice de validation enregistrent explicitement que `pre.010-fix.001` bloque `rel.001` tant que la validation opérateur n'est pas propre.
## 11. Contrôles réellement exécutés dans l'environnement de préparation
L'environnement de préparation ne possède ni `cargo` ni `rustc`. Aucune compilation Rust n'est donc revendiquée.
Contrôles réellement exécutés :
```text
nouvel audit sur base opérateur en report-only -> 552 violations / 50 candidates
nouvel audit sur arbre cible -> clean / 0 candidate / clean
versions des 83 fichiers Rust modifiés -> +1 exact
réaudit primaire ed25519-dalek 3.0.0 -> effectué
réaudit primaire solana-keypair 3.1.2 -> effectué
```
Les APIs Dalek employées par Wallet (`SigningKey`, `VerifyingKey`, `Signer`, `Signature`) existent dans la documentation `3.0.0`, mais seule la compilation opérateur peut valider définitivement l'intégration du workspace réel.
## 12. Validation opérateur obligatoire
Après overlay :
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-wallet-lib
cargo test --workspace
cargo tree -p ksp-wallet-lib
cargo tree -p ksp-wallet-lib -d
cargo tree -i ed25519-dalek@3.0.0
cargo tree -i ed25519-dalek@2.2.0
cargo tree -i solana-keypair@3.1.2
cargo tree -i solana-address@2.7.0
```
Critères :
```text
aucun warning KSP
nouvel audit Python clean
aucune régression tests
Dalek 3.0.0 direct depuis Wallet
Dalek 2.2.x uniquement via solana-keypair 3.1.2 si l'upstream reste inchangé
solana-keypair parent KSP direct = Wallet
frontières Config/Transport/Logging/Solana inchangées
```
Si une validation échoue, produire `pre.010-fix.002` au lieu de passer à `rel.001`.
## 13. Suite
`rel.001` reste **bloqué** jusqu'à validation complète de ce fix.
Après validation seulement :
```text
0.2.5-rel.001
-> workspace.package.version = 0.2.5
-> validation finale
-> tag stable v0.2.5
-> ouverture 0.2.6 via prompts/011-V0_2_6_START_PROMPT.md
```