v0.4.8-pre.006

This commit is contained in:
2026-08-05 20:30:16 +02:00
parent 4187643148
commit 80c439c988
16 changed files with 997 additions and 131 deletions

View File

@@ -1,11 +1,11 @@
<!-- file: docs/plans/V0_4_8_SOLANA_PROGRAM_METADATA_AND_TOKEN_2022_COMPLETENESS_PLAN.md -->
<!-- version: 5 -->
<!-- version: 7 -->
# Plan `0.4.8` — Solana Program Metadata et complétude Token-2022
## 1. Statut et rôle
Ce document est le livrable principal de `0.4.8-pre.001`, réconcilié après laudit contractuel de `0.4.8-pre.002`, les modèles de `pre.003`, les décodeurs de comptes de `pre.004` et le décodeur dinstructions de `pre.005`. Il constitue le plan vivant de la version et reste modifiable lorsque laudit du code, des interfaces officielles, de lIDL ou des validations Devnet impose un ajustement.
Ce document est le livrable principal de `0.4.8-pre.001`, réconcilié après laudit contractuel de `0.4.8-pre.002`, les modèles de `pre.003`, les décodeurs de comptes de `pre.004`, le décodeur dinstructions de `pre.005` et la matérialisation de `pre.006`. Il constitue le plan vivant de la version et reste modifiable lorsque laudit du code, des interfaces officielles, de lIDL ou des validations Devnet impose un ajustement.
Il doit être maintenu pendant chaque prerelease, puis archivé pendant la dernière prerelease après transfert des décisions durables vers le ROADMAP, les matrices, les guides, les rapports, les TODO et les changelogs concernés.
@@ -15,13 +15,13 @@ Il doit être maintenu pendant chaque prerelease, puis archivé pendant la derni
### 2.1 Surfaces strictement distinctes
| Surface | Program ID ou frontière | Rôle dans `0.4.8` |
|-----------------------------------|--------------------------------------------------------------------|---------------------------------------------------------------------------------|
| Metaplex Token Metadata | `metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s` | surface clôturée en `0.4.7`, hors développement principal |
| Token-2022 Token Metadata | programme Token-2022 `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` | compléter le contrat déjà partiellement pris en charge |
| `spl-token-metadata-interface` | interface sans Program ID autonome imposé | source contractuelle des instructions metadata implémentées par Token-2022 |
| Solana Program Metadata | `ProgM6JCCvbYkfKqJYHePx4xxSUSqJp7rh8Lyv7nk7S` | nouvelle surface on-chain à implémenter sous `metadata/solana_program_metadata` |
| contenu distant HTTP/IPFS/Arweave | transport off-chain indépendant | hors `0.4.8`, reporté à lhorizon `0.15+` |
| Surface | Program ID ou frontière | Rôle dans `0.4.8` |
|---|---|---|
| Metaplex Token Metadata | `metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s` | surface clôturée en `0.4.7`, hors développement principal |
| Token-2022 Token Metadata | programme Token-2022 `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` | compléter le contrat déjà partiellement pris en charge |
| `spl-token-metadata-interface` | interface sans Program ID autonome imposé | source contractuelle des instructions metadata implémentées par Token-2022 |
| Solana Program Metadata | `ProgM6JCCvbYkfKqJYHePx4xxSUSqJp7rh8Lyv7nk7S` | nouvelle surface on-chain à implémenter sous `metadata/solana_program_metadata` |
| contenu distant HTTP/IPFS/Arweave | transport off-chain indépendant | hors `0.4.8`, reporté à lhorizon `0.15+` |
Aucun décodeur Token-2022 existant nest un décodeur partiel de `ProgM6…`. Les deux contrats doivent conserver des namespaces, modèles, matrices, tests et scénarios distincts.
@@ -109,6 +109,20 @@ La cible est de compléter les cinq opérations de linterface dans les module
- scénarios synthétiques et Devnet ;
- panneau desktop distinct de Solana Program Metadata.
### 4.3 Règle transversale de complétude
Pour chaque surface retenue dans `0.4.8` :
- le décodeur couvre toutes les formes officielles actuelles, historiques, remplacées ou obsolètes que les sources permettent didentifier exactement ;
- toute observation ou tout état décodé possède une matérialisation explicite, avec refus des mutations non committées lorsque la projection exige un succès ;
- toutes les opérations courantes doivent être constructibles et exécutables, y compris les mutations destructrices, irréversibles ou susceptibles décraser un état existant ;
- le caractère dangereux dune opération ne retire pas sa capacité dexécution : son plan doit déclarer ses coûts, signataires, confirmations et postconditions, puis être évalué par le cadre commun `crate::ExSafetyChecker` avant simulation, signature et envoi ;
- une opération officiellement obsolète reste constructible uniquement avec une annotation `#[deprecated]`, un statut explicite et une approbation renforcée ; elle reste elle aussi soumise au cadre commun de sécurité ;
- une ancienne version officiellement remplacée par une autre forme wire reste decode-only et ne reçoit pas de builder concurrent ;
- aucune classification `Deprecated`, remplacée ou decode-only ne doit être inventée sans preuve officielle.
Pour Solana Program Metadata, laudit courant classe les neuf instructions stables comme actuelles : la cible de lexécuteur est donc de couvrir les neuf, notamment `Write`, `SetData`, `SetImmutable`, `Trim` et `Close`, sans neutraliser les opérations destructrices au niveau du builder.
## 5. Stratégie de validation obligatoire
Pour chaque capacité exécutable retenue :
@@ -118,7 +132,7 @@ Pour chaque capacité exécutable retenue :
3. fixture créée par les APIs Rust du workspace lorsque cela est approprié ;
4. construction du message exact ;
5. simulation RPC conservée ;
6. soumission Devnet lorsque lopération est sûre et disponible ;
6. soumission Devnet sur une fixture contrôlée lorsque lopération est réalisable, après une décision compatible du cadre commun `ExSafetyChecker` ;
7. confirmation et signature conservées ;
8. lectures stateful avant/après ;
9. postconditions explicites ;
@@ -221,7 +235,7 @@ Résultat durable : `kb-lib` expose des snapshots et parseurs bornés pour `Buff
Validation définitive reçue le 5 août 2026 : `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --all-targets` et laudit workspace sont propres ; `cargo test -p kb-lib` réussit avec 653 tests unitaires, six tests dintégration et les doc-tests.
### `0.4.8-pre.005` — décodeur dinstructions Solana Program Metadata — terminé côté delta
### `0.4.8-pre.005` — décodeur dinstructions Solana Program Metadata — terminé
Résultat durable : les releases stables `program@v1.0.0` et `program@v1.0.1` exposent exactement neuf discriminants `0..8`. Le tag `5`, nommé `WithdrawExcessLamports` pendant une phase pré-stable, est couvert uniquement comme `Trim` et conserve cet ancien nom comme provenance. Les variantes runtime actuelles qui dépassent lIDL sont explicitement préservées.
@@ -232,19 +246,29 @@ Résultat durable : les releases stables `program@v1.0.0` et `program@v1.0.1` ex
- matrice contractuelle et audit historique dédiés ;
- tests synthétiques et test de façade publique.
Critère atteint côté delta : inventaire stable et historique fermé, décodeur fail-closed et frontières off-chain conservées ; compilation, Clippy et tests Rust restent à exécuter dans lenvironnement du projet avant validation définitive.
Validation définitive reçue le 5 août 2026 : `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --all-targets` et laudit workspace sont propres ; `cargo test -p kb-lib` réussit avec 660 tests unitaires, les tests dAPI externes et la matrice de nomenclature.
### `0.4.8-pre.006` — matérialisation Solana Program Metadata
### `0.4.8-pre.006` — matérialisation Solana Program Metadata — terminé côté delta
- snapshots et observations dédiés ;
- autorité, mutabilité, source, format, encodage, compression et données on-chain pertinentes ;
- aucune résolution de contenu distant.
Résultat durable : les deux comptes décodés et les neuf instructions stables possèdent une projection. Les comptes `Buffer` et `Metadata` produisent des états autoritatifs bornés ; les instructions produisent des faits de mutation committés non autoritatifs. Les données directes et Buffer sont conservées en base64 avec SHA-256 ; les URL et références externes restent strictement on-chain et ne déclenchent aucun fetch.
- snapshots autoritatifs dédiés pour `Buffer` et `Metadata` ;
- faits committés dédiés pour les neuf instructions stables ;
- autorité, mutabilité, source, format, encodage, compression, capacité et données on-chain pertinentes ;
- refus des observations échouées ou non committées ;
- matrice de onze projections et test de façade externe ;
- aucune résolution de contenu distant ni lecture implicite dun compte externe.
Critère atteint côté delta : tout ce qui est décodé dans la surface `ProgM6…` est matérialisable. Compilation, Clippy et tests Rust restent à exécuter dans lenvironnement du projet avant validation définitive.
### `0.4.8-pre.007` — builders et exécuteur Solana Program Metadata
- PDA, calculs de taille et rent ;
- builders contractuellement équivalents ;
- politiques de signataires, autorités et capacités.
- builders contractuellement équivalents pour toutes les opérations courantes, y compris les mutations destructrices, irréversibles ou écrasantes ;
- politiques de signataires, autorités, coûts, confirmations, postconditions et capacités ;
- intégration explicite au cadre commun `crate::ExSafetyChecker` : le builder expose le plan complet, tandis que la politique de sécurité décide si ce plan peut progresser vers la simulation, la signature et lenvoi ;
- classification opérationnelle conforme aux règles : opérations courantes exécutables, opérations officiellement obsolètes annotées `#[deprecated]` avec approbation explicite, versions officiellement remplacées conservées en decode-only ;
- état audit actuel : les neuf instructions stables `0..8` sont courantes, sans instruction remplacée ou obsolète, donc toutes les neuf doivent être ciblées par lexécuteur sauf découverte officielle contraire documentée avant code.
### `0.4.8-pre.008` — pipeline stateful Solana Program Metadata