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

120 lines
3.3 KiB
Markdown

<!-- file: deltas/0.2.5/pre.005-fix.001.md -->
<!-- version: 1 -->
# Delta `0.2.5-pre.005-fix.001` — collision constructeur/getter `WalletViewDescriptorV1::enabled`
## Base requise
```text
livraison : 0.2.5-pre.005
workspace.package.version = "0.2.5-pre.5"
```
## Motif
Les validations opérateur de `pre.005` échouent dès `cargo check --workspace` sur `ksp-wallet-lib` avec :
```text
error[E0592]: duplicate definitions with name `enabled`
```
`WalletViewDescriptorV1` déclarait simultanément :
```rust
pub(crate) const fn enabled(slot_id: [u8; KSPWALLET_V1_SLOT_ID_BYTES]) -> Self
pub const fn enabled(&self) -> bool
```
Rust n'autorise pas deux éléments inhérents de même nom sur un type, même lorsqu'un élément est un constructeur associé et l'autre une méthode prenant `&self`.
Les erreurs `E0599` observées sur les appels `.enabled()` sont des conséquences de cette collision de définition et non une absence conceptuelle du getter.
## Correction
Le getter public est conservé inchangé :
```rust
pub const fn enabled(&self) -> bool
```
Le constructeur crate-private est renommé :
```rust
pub(crate) const fn enabled_for_slot(slot_id: [u8; KSPWALLET_V1_SLOT_ID_BYTES]) -> Self
```
Les deux callsites internes de création du descripteur VIEW sont mis à jour dans `wallet.rs`.
Ce choix conserve :
- la surface publique déjà attendue `descriptor.enabled()` ;
- la sémantique wire et transcript de `pre.003+` ;
- les invariants VIEW/OWNER ;
- les vecteurs cryptographiques et le format `.kspwallet` V1 ;
- aucune modification de dépendances.
## Décision sur `solana-keypair`
Aucun déplacement de `solana-keypair` vers `ksp-core-lib` n'est effectué dans ce fix.
Les règles KSP autorisent `solana-keypair` comme primitive fondamentale, mais Core ne doit pas devenir un agrégateur automatique de toutes les primitives Solana autorisées. Dans l'architecture actuelle :
- `Pubkey` est un value type transversal et non secret, donc son contrat via `ksp-core-lib` est justifié ;
- `Keypair` possède le secret Solana et constitue une capacité de signature ;
- `ksp-wallet-lib` est actuellement le composant propriétaire concret du secret, de l'ouverture et de la signature ;
- les futures couches d'exécution doivent préférer une capacité de signature Wallet plutôt que recevoir une keypair brute.
La propriété de `solana-keypair` sera réauditée uniquement si une autre crate KSP de bas niveau démontre un besoin concret de manipuler une keypair brute indépendamment de Wallet.
## Version Cargo
Le correctif modifie du Rust de production :
```text
0.2.5-pre.5 -> 0.2.5-pre.5.fix.1
```
## Fichiers modifiés
```text
Cargo.toml
crates/ksp-wallet-lib/src/wire.rs
crates/ksp-wallet-lib/src/wallet.rs
```
## Fichiers ajoutés
```text
deltas/0.2.5/pre.005-fix.001.md
```
## Fichiers supprimés
Aucun.
## Validation attendue après application
```bash
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-wallet-lib
cargo test --workspace
```
Le `cargo tree` de `pre.005` reste pertinent après compilation :
```bash
cargo tree -p ksp-wallet-lib
cargo tree -p ksp-wallet-lib -d
cargo tree -i ed25519-dalek@2.2.0
cargo tree -i solana-keypair@3.1.2
cargo tree -i solana-address@2.7.0
```
## Commit attendu
```text
v0.2.5-pre.005-fix.001
```