v0.2.5-pre.010.fix.001
This commit is contained in:
387
deltas/0.2.5/pre.010-fix.001.md
Normal file
387
deltas/0.2.5/pre.010-fix.001.md
Normal file
@@ -0,0 +1,387 @@
|
||||
<!-- 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
|
||||
```
|
||||
Reference in New Issue
Block a user