v0.4.7-pre.013
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
<!-- file: docs/validation/V0_4_7_PRE_013_METAPLEX_DESKTOP_DEVNET_EXECUTION.md -->
|
||||
<!-- version: 8 -->
|
||||
|
||||
# Validation `0.4.7-pre.013` — exécution Metadata Devnet desktop
|
||||
|
||||
## Périmètre
|
||||
|
||||
- adaptateurs Tauri minces vers `kb-pipeline-demo-scenarios` ;
|
||||
- inventaire des 20 opérations courantes ;
|
||||
- modèles JSON typés disponibles pour les parcours nommés ;
|
||||
- simulation RPC Devnet réelle par défaut ;
|
||||
- soumission uniquement avec `submit` et `operatorConfirmed` ;
|
||||
- affichage distinct du plan, du préflight, de la simulation et des preuves stateful ;
|
||||
- maintien des scénarios synthétiques.
|
||||
|
||||
## Contrats de sécurité
|
||||
|
||||
- profil obligatoirement classé Devnet ;
|
||||
- opérations dépréciées rejetées par le runner réutilisable ;
|
||||
- intent et lectures stateful désérialisés côté Rust ;
|
||||
- une campagne Devnet déjà active bloque une seconde exécution ;
|
||||
- aucune preuve réseau n’est produite par les scénarios synthétiques.
|
||||
|
||||
## Correctif `pre.013-fix-001`
|
||||
|
||||
- correction de la conversion de `MdSignature` vers la chaîne UI en lisant explicitement la valeur du newtype ;
|
||||
- aucun changement du contrat réseau, du runner ou des DTO ;
|
||||
- compilation et validations locales à rejouer après application.
|
||||
|
||||
## Validation locale attendue
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo check --workspace
|
||||
cargo clippy --all-targets
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
cargo test -p kb-app-demo-desktop
|
||||
cargo test -p kb-pipeline-demo-scenarios
|
||||
cargo tauri dev -c kb-app-demo-desktop/tauri.conf.json
|
||||
```
|
||||
|
||||
La validation manuelle doit remplacer les placeholders par des comptes Devnet réels, lancer une simulation puis, pour un parcours maîtrisé, une soumission explicitement confirmée. Les signatures, slots et postconditions doivent être conservés comme preuves avant la clôture.
|
||||
|
||||
## Correctif guide, fixture Create et profils Devnet
|
||||
|
||||
- ajout du guide intégré et du journal d’exécution dans le panneau Metadata ;
|
||||
- ajout des titres des blocs JSON ;
|
||||
- ajout du préparateur de fixture `Create` avec mint SPL classique et PDA dérivés ;
|
||||
- ajout des dépendances directes `mpl-token-metadata` et `solana-pubkey` dans `kb-pipeline-demo-scenarios` ;
|
||||
- chargement des profils via une commande Metadata dédiée ;
|
||||
- préparation automatique du profil sélectionné, comme dans les panneaux Solana Core et SPL ;
|
||||
- diagnostic explicite lorsqu’aucun profil Devnet compatible n’est retourné.
|
||||
|
||||
## Correctif d’initialisation frontend
|
||||
|
||||
- les listes de profils, contrats et opérations restaient vides parce que l’initialisation `DOMContentLoaded` échouait avant les appels Tauri ;
|
||||
- le TypeScript attendait `clearMetadataLogButton` et `metadataExecutionLogOutput`, absents du HTML ;
|
||||
- les deux contrôles sont ajoutés au panneau ;
|
||||
- un test de contrat vérifie désormais la présence de tous les identifiants nécessaires au chargement initial.
|
||||
|
||||
|
||||
## Correctif fix-005
|
||||
|
||||
- suppression de la duplication des contrôles Copier/Effacer du journal ;
|
||||
- ajout d’un panneau de paramètres communs Devnet avec limites du profil ;
|
||||
- séparation des boutons Simuler et Soumettre ;
|
||||
- autorisation de construire un plan de soumission avec `dry_run = false`, la simulation exacte restant obligatoire avant signature et envoi ;
|
||||
- maintien du refus de soumission sans confirmation opérateur.
|
||||
|
||||
## Correctif `pre.013-fix-006` — print supply NFT
|
||||
|
||||
La campagne Devnet a atteint le programme Metaplex et exécuté l’instruction `Create` en simulation réelle. Le programme a refusé le modèle avec l’erreur `Print supply is required for non-fungibles` (`Custom(166)`) parce que `print_supply` était `null`.
|
||||
|
||||
Le modèle nommé et le préparateur de fixture utilisent désormais `PrintSupply::Zero`, sérialisé sous la forme JSON `"Zero"`, pour le scénario `NonFungible`. Un test empêche la régression. La simulation et la soumission doivent être rejouées après application ; aucune soumission réussie n’est déclarée dans ce rapport.
|
||||
## Correctif `pre.013-fix-007` — programme SPL Token requis
|
||||
|
||||
La simulation réelle suivante a dépassé la validation de `PrintSupply::Zero`, puis le programme Metaplex a refusé l’instruction avec `Missing SPL token program` (`Custom(149)`). Le transport RPC, la compilation du message, l’estimation des frais et l’appel `simulateTransaction` ont donc été confirmés ; aucune soumission n’a eu lieu.
|
||||
|
||||
Le modèle nommé et le préparateur de fixture `Create` renseignent désormais explicitement le programme SPL Token classique canonique :
|
||||
|
||||
```text
|
||||
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
|
||||
```
|
||||
|
||||
Les tests vérifient conjointement `print_supply = "Zero"` et ce Program ID. La campagne doit être rejouée en simulation avant toute soumission.
|
||||
|
||||
|
||||
## Correctif `fix-008` — préconditions réseau par opération
|
||||
|
||||
- la fixture `Create` utilise un nouveau mint versionné créé avec freeze authority active ;
|
||||
- owner, layout classique, décimales, supply, mint authority et freeze authority sont vérifiés avant génération de l’intent ;
|
||||
- une opération sans modèle nommé efface l’intent courant et bloque simulation/soumission, au lieu de réutiliser le JSON précédent ;
|
||||
- les requirements Metaplex sont documentés dans `kb-lib/USAGE.md` et `kb-pipeline/USAGE.md` ;
|
||||
- les simulations observées avant ce correctif ont toutes échoué et ne sont pas déclarées validées.
|
||||
|
||||
## Correctif 009 — parcours cohérents et matérialisation optionnelle
|
||||
|
||||
La validation desktop n’utilise plus implicitement une opération isolée sans contexte de fixture. L’inventaire expose cinq parcours : NFT classique, SFT, fungible, collection parent/membre et pNFT. Chaque parcours précise la fixture, l’état initial, l’état terminal, les opérations applicables et les projections attendues.
|
||||
|
||||
La matérialisation est désormais une option opérateur indépendante. Après confirmation, elle exige des lectures de postcondition, décode les comptes Metaplex bornés et produit les projections canoniques correspondantes. Elle ne télécharge pas les URI off-chain.
|
||||
|
||||
La fixture NFT a été versionnée en `create-mint-profile-authority-v3.json` afin de ne pas réutiliser le mint déjà soumis. La mint authority et la freeze authority doivent être le wallet du profil, tandis que le keypair du mint ne sert qu’à signer la création du compte mint.
|
||||
|
||||
## Correctif `0.4.7-pre.013-fix-010` — compatibilité de la CLI `spl-token`
|
||||
|
||||
La CLI locale utilisée pour les validations ne prend pas en charge l’option `create-token --freeze-authority`. Le préparateur utilise donc le parcours compatible suivant :
|
||||
|
||||
1. création du mint classique à `0` décimale avec `--enable-freeze` ;
|
||||
2. transfert explicite de l’autorité `freeze` depuis le keypair du mint vers le wallet du profil ;
|
||||
3. transfert explicite de l’autorité `mint` vers le même wallet ;
|
||||
4. relecture du compte et validation stricte des deux autorités avant génération de l’intent Metaplex.
|
||||
|
||||
La fixture est versionnée en `create-mint-profile-authority-v4.json` afin de ne pas réutiliser un mint absent ou partiellement préparé par le correctif précédent.
|
||||
|
||||
### 0.4.7-pre.13 fix-011
|
||||
|
||||
- remplace la préparation Metaplex fondée sur `solana-keygen`, `solana` et `spl-token` par une transaction Rust native ;
|
||||
- crée le mint par `SystemCreateAccount` puis `SPL Token InitializeMint2` dans un même message simulé, signé et confirmé ;
|
||||
- utilise explicitement le wallet du profil comme mint authority et freeze authority ;
|
||||
- conserve le keypair du mint dans `kb-wallet` sans exposer ni déléguer ses secrets à une CLI externe.
|
||||
|
||||
|
||||
## Correctif fonctionnel fix-014
|
||||
|
||||
Le panneau n’expose plus les cinq parcours Devnet comme s’ils étaient tous préparables. Le premier parcours réellement exécutable est le NFT classique `create -> update`. La préparation d’étape génère conjointement l’intent, les lectures avant confirmation et les lectures après confirmation utilisées par la matérialisation. Les parcours collection, SFT, fungible et pNFT restent présents dans la matrice synthétique cible et devront être activés seulement après ajout de leurs fixtures complètes.
|
||||
Reference in New Issue
Block a user