12 KiB
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 :
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 :
workspace.package.version = 0.2.5-pre.10.fix.1
Identifiant de livraison :
0.2.5-pre.010-fix.001
Commit attendu après validation :
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 :
- mettre la dépendance KSP directe
ed25519-daleksur la génération stable3.0; - normaliser tout le workspace Rust actuel, pas seulement
ksp-wallet-lib, selon les conventions KSP qui ne sont pas couvertes parrustfmt/Clippy ; - renforcer le prompt d'ouverture
0.2.6afin qu'une nouvelle session récupère de manière autonome les règles, le gatepre.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 :
ed25519-dalek = { version = "^3.0", default-features = false }
Le manifest Wallet conserve les features locales réellement consommées :
ed25519-dalek = { workspace = true, features = ["signature", "zeroize"] }
Le réaudit primaire effectué pendant la préparation confirme pour ed25519-dalek 3.0.0 :
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 :
ed25519-dalek ^2.1.1
Le tree attendu après ce fix comporte donc deux générations Dalek légitimes :
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 :
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 :
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 :
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 :
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 :
python3 scripts/audit_rust_workspace_rules.py
Le wrapper exécute :
general Rust structural audit
crate-root/export completeness audit
KSP workspace boundary audit
Le mode diagnostic existe également :
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é :
pub extern crate tracing as __private_tracing
est remplacé par un bridge macro caché sous son nom canonique :
#[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 :
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 :
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 :
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 :
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
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 :
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 :
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 :
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 :
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