44 KiB
CHANGELOG — ks-pipeline-demo-scenarios
0.5.1-pre.004
- migre les paramètres d'environnement des scénarios réutilisables vers
KS_*et les DSN de test versKS_SECRET_*; - consolide les fixtures Token-2022 exposées au desktop sous
KS_PUBLIC_*, sans conserver les anciens aliasesTOKEN_2022_*/KB_*; - aligne le CLI, les campagnes Devnet, le rendu
fixture.envet le guide d'utilisation sans rejouer ni requalifier les scénarios réseau.
0.5.1-pre.002
- renomme
kb-pipeline-demo-scenariosenks-pipeline-demo-scenarios, sa bibliothèque enks_pipeline_demo_scenarioset son CLI enks-pipeline-demo-scenarios-cli; - renomme le fichier source du CLI et les adaptateurs desktop qui consomment les scénarios ;
- aligne le target racine et les targets de fixtures propres à cette crate sans changer les scénarios qualifiés.
0.5.0-pre.003
Documentation
- clarifie que les fixtures, séquences et qualifications réseau réutilisables appartiennent à cette crate lorsqu’elles sont consommées par les tests, le CLI ou le desktop ;
- prépare
0.5.4pour centraliser les dispatchs, compositions decoder/materializer et critères de complétion encore réutilisables depuiskb-app-demo-desktop, sans rouvrir les preuves réseau déjà qualifiées.
0.4.8-pre.015
pre.015-delta-fix-001réconcilie l’USAGE avec la preuve Devnet Solana Program Metadata déjà acquise : les neuf opérations sontconfirmeddepuispre.010, etCloseconserve sa preuve spécifiqueaccount_absence; aucune nouvelle campagne réseau n’est ouverte.
0.4.8-pre.013
pre.013-delta-fix-037consolide la clôture Metaplex après validation locale complète defix-036:cargo fmt --all,cargo check --workspace,cargo clippy --all-targetssans warning, audit workspace clean et 105 tests unitaires + 1 CLI + 1 API externe réussissent. Les guides actifs cessent de présenterVerify/Unverify, le lifecycle pNFT ou Token Owned Escrow commenot_run, la campagne maintenance finale est documentée, et le TODO retire les tâchespre.013terminées. La matrice fonctionnelle reste inchangée à 15confirmed, 5unavailable, 0not_run.pre.013-delta-fix-036ferme la matrice Devnet des 20 opérations courantes :Updateest confirmé sur NFT par4hxxBnsCA1JBJPNHgXRDeq1W7rXbFj2yySscWJKxU1VTMDcPzPfoWy7QzANHSDsbQfxxcwuAQNDLqEukgsug6qoZau slot482162413, avec simulation au slot482162408, replay, matérialisation, idempotence et transitionprimary_sale_happened false -> true;Resize,Migrate,CollectetCloseAccountssont classésunavailableaprès probes Devnet exactsCustom(201),Custom(75),Custom(7)etCustom(188)sans soumission. La matrice finale compte 15confirmed, 5unavailable, 0not_run; le warning Clippyif_same_then_elsedu test de matrice est supprimé en fusionnant les branches NFT identiques.pre.013-delta-fix-035corrige le parseur des refus runtime de la campagne maintenance :simulation.errorcontient déjà le JSON RPC sous forme de chaîne, et sa double sérialisation empêchaitfix-034de reconnaître leCustom(201)pourtant observé. Le probe parse désormais structurellementInstructionError[1].Custom; le test de contrat existant couvre les codes201,75,7et188. La matrice reste à 14confirmed, 2unavailableet 4not_run.pre.013-delta-fix-034enregistre le premier run de maintenance :Updatefranchit confirmation et postconditionprimary_sale_happened false -> true, puisResizeatteint le handler courant et la simulation est refusée avecAlreadyResized,Custom(201),14643CU consommées et aucune soumission. Comme les comptes créés aujourd’hui sont déjà au layout cible et qu’un succès exigerait un compte legacy sous-dimensionné contrôlé,Resizepasse àunavailable; la matrice devient 14confirmed, 2unavailableet 4not_run. La campagne corrigée soumet uniquementUpdateet traite désormaisResize,Migrate,CollectetCloseAccountscomme probes simulation-only attendus respectivement en201,75,7et188.pre.013-delta-fix-033qualifie définitivement Token Owned Escrow :CreateEscrowAccount(Yy7NEvme3obuiGRBbBjpuk3dv4aPMPBQ2ns7KmbY4K5EtyAimaaM8qN5SQzEqr9SPbRu1VDCFkNpAjnRGW4JYuj, slot482147206),TransferOutOfEscrow(4yJcSvnZJqihfZTE7nxN3o7H7zBCacpdZdwNQ1ueWQMmQZxR7KRb99C7rfrXX2AyezfSStMdqqTYL3oEWgwRhFi3, slot482147252) etCloseEscrowAccount(3GuwmGf9JEK7rHE3tudnxskvruyML9AGVXQimxii3uHdXqNEF4ScpmDXwhU3y2eaUnTbBPPhVkhRfLwJr9jbGJBo, slot482147267) terminent simulation, confirmation, hydratation canonique, extraction Core, replay, matérialisation, postconditions stateful et idempotence ; la matrice passe à 14confirmed, 1unavailableet 5not_run.- prépare la campagne finale de maintenance sur un NFT frais :
Updatedoit retournerprimary_sale_happened false -> true,Resizedoit confirmer sans altérer la possession du NFT, tandis queMigrate,CollectetCloseAccountssont uniquement simulés et doivent respectivement exposer les refus runtimeRemoved(75),UpdateAuthorityIncorrect(7)etInvalidCloseAuthority(188)sans aucune soumission. - ajoute trois tests au scénario maintenance et conserve les probes réservés fail-closed : la campagne n’essaie pas d’usurper
FEE_AUTHORITYniOWNERLESS_CLOSE_AUTHORITY. pre.013-delta-fix-032enregistre le premier run Devnet escrow defix-031:CreateEscrowAccountatteint bien le handler (IX: Create Escrow Account) mais la simulation est refusée avecMissingRequiredSignature, 17 268 CU consommées et aucune soumission. La cause est le placeholderprogram_idajouté par le builder générique à l’authority=Noneterminale ; les trois opérations escrow restent non promues pendant le correctif.pre.013-delta-fix-031enregistre le rerunfix-030du probeUse: le test termineok, la simulation Devnet au slot482133665est refusée avecInstructionError[0]=InvalidInstructionData, quatre logs sont conservés et aucune soumission n’est effectuée ; tous les autres checks et tests annoncés restent sans régression.- prépare une campagne Devnet Token Owned Escrow strictement bornée : NFT parent frais, token attribut fungible frais,
CreateEscrowAccount, création de l’ATA SPL classique détenu par le PDA escrow, dépôt contrôlé d’une unité brute,TransferOutOfEscrowavec fermeture de l’ATA vidé, puisCloseEscrowAccountavec disparition du compte escrow. - ajoute des postconditions stateful
TokenOwnedEscrow, des preuves pipeline/idempotence pour les trois opérations Metaplex et maintient la matrice à 11confirmed, 1unavailableet 8not_runtant que cette campagne n’a pas été exécutée sur Devnet. pre.013-delta-fix-030classeUsecommeunavailableaprès le probe Devnet réel : l'instruction courante de discriminant 51 est simulée mais rejetée par Token Metadata avecInstructionError[0]=InvalidInstructionData,Program log: Error: InvalidInstructionData,12085compute units consommées et aucune soumission ; la matrice passe à 11confirmed, 1unavailableet 8not_run.- le probe
Usepeut désormais retourner cette simulation négative comme preuve et termineroken modesubmit=false; le contrat de soumission reste simulation-first strict et ne signe jamais une simulation échouée. pre.013-delta-fix-029qualifie définitivement le cycle pNFT :Delegate(StakingV1),Lock,Unlock,Revoke(StakingV1),Delegate(TransferV1)etTransferterminent tous simulation, confirmation, hydratation canonique, extraction Core, replay, matérialisation et idempotence ; les cinq opérations canoniquesDelegate,Revoke,Lock,Unlock,Transferpassent àconfirmedsurprogrammable_nft, portant la matrice à 11/20 opérations confirmées.- prépare un probe Devnet borné pour
Usesur un NFT classique frais avecUses::Multiple { remaining: 2, total: 2 }: le probe simule d’abord l’instruction courante et distingue explicitement succès confirmé et indisponibilité runtime ; aucune promotion n’est faite tant que la réponse Devnet n’est pas observée. pre.013-delta-fix-028enregistre le rerunfix-027: la campagne pNFT franchit désormaisDelegate(Staking) -> Lock -> Unlock -> Revoke(Staking) -> Delegate(Transfer) -> Transferjusqu’à la postcondition finale du token account source ; le transfert est confirmé et son TokenRecord destination estUnlockedsans delegate, mais la campagne exigeait à tort que l’ATA source vide resteFrozenalors que le handler Metaplex courant thaw la source, transfère, puis freeze uniquement la destination ;- corrige la postcondition finale en exigeant source
amount=0, state=Initializedet destinationamount=1, state=Frozen, et ajoute ces états àMETAPLEX_PNFT_LIFECYCLE_STATE; aucune opération lifecycle n’est encore promue avant un rerun complet émettant les six signatures/slots et le bundle evidence final. pre.013-delta-fix-027enregistre le rerunfix-026: le workspace est entièrement propre (ks-lib706/706,ks-pipeline107/107, scénarios 96/96, desktop 135/135) etDelegate(StakingV1)franchit désormais confirmation, hydratation canonique, extraction Core, replay, matérialisation et idempotence avant qu’une postcondition de campagne ne lise à tortdelegate=Nonedans la projection JSON brute duTokenRecord; la campagne reste non qualifiée jusqu’au rerun avec projection canonique.pre.013-delta-fix-026enregistre le rerunfix-025:Create -> Mintfranchit désormais entièrement sa préparation pNFT, puisDelegate(StakingV1)est réellement confirmé par4S2uDrVU6ci59eKeGtGeXoUCbsUr4WxzSa7uYhmBxLtjKfNwpBkZRqm59V9cfbD99oE9AugMYppiQqnMbV2Hy1p7au slot482106293avec hydratation canonique et extraction Core réussies ;- le replay échoue ensuite dans
ks-libavant matérialisation parce queDelegate.authorityet le fee payer sont le même wallet : Core replay expose donc le privilège writable global sur la position authority, alors que l’AccountMeta officiel de cette position est seulement signer ; - prépare le correctif de la même frontière pour
Delegate/Revokeet pourLock/Unlock, oùtoken_ownerest également le fee payer dans la campagne ; les cinq opérations lifecycle restentnot_runjusqu’à un rerun complet. pre.013-delta-fix-025enregistre la première tentative réseau du cycle pNFT après correction du harness :Createest réellement confirmé parPNkQAnykFoHVsREkhDbTW9eccyJoQvQbRZ2MJ4FsFRXyXint9fj6FT9PW45W5R3yi9HJ2aiSZXssH6B6pmyCcEzau slot482096529, puis la campagne s’arrête pendant sa post-validation stateful sur la Master EditionHmCuW752ukBChVTbXtKJphUwJTJDdSycrgs6SrU2nT4Bdu mintDtBji9AYCqLRB48LFEFir427Kwy4Ehie6Pc8S87aQ6Rb;- le défaut est dans
ks-lib: le trailer officiel de 2 octets d’une Master Edition compacte avait été introduit parfix-021comme padding nul, ce qui rejetait précisément le byteProgrammableNonFungible(4)écrit par le programme courant ; aucune des cinq opérations lifecycle n’a encore été atteinte ni promue. pre.013-delta-fix-024corrige uniquement le harness#[cfg(test)]de la campagne pNFT préparée parfix-023: il réutilise le chargement de configuration, la surcharge PostgreSQL, la constructionPostgresStoreOptions, le pool HTTP et le wallet directory déjà éprouvés par les autres campagnes Metaplex ;- aligne l'émission
METAPLEX_PNFT_LIFECYCLE_EVIDENCEsur les champs réels deDevnetMetaplexTokenMetadataExecutionSummary(genesis_hash,simulation_context_slot,readiness.message_hash,fee.fee_lamports) au lieu de champs inexistants du résultat brut de simulation ; - enregistre que
cargo check --workspacedefix-023était vert parce que le défaut restait sous#[cfg(test)], tandis queclippy --all-targetsetcargo test -p ks-pipeline-demo-scenarioscompilaient ce harness et échouaient avant toute transaction pNFT ; la matrice reste à 6 opérationsconfirmedet 14not_run. pre.013-delta-fix-023qualifie définitivementPrintetBurnsur Devnet :Printest confirmé parREHAxUZrSdKDj8F8k27Amrg7hwuJFhVfstjc9xjn2XGfTX38fH4tFwPeNrF5zeMN5pc21PpUPSgaKXMMfTFd7TEau slot482087799, puisBurnpar4cNUxGGSWifuAtqdPJAtM3Cjpi4JATitRDqrvEAe85NLpMWcgWmC27bsfjNUmK6sEBDovNPtkPV3wDH1LpfGbhd1au slot482087818; les deux étapes terminent hydratation canonique, extraction Core, replay, matérialisation et idempotence ;- promeut
PrintetBurnàconfirmedsur la famille NFT dans la matrice Devnet v3, qui passe à 6 opérationsconfirmedet 14not_run; - prépare la campagne spécialisée pNFT
Delegate(Staking) -> Lock -> Unlock -> Revoke(Staking) -> Delegate(Transfer) -> Transfersur une fixtureprogrammable_nftfraîche, avec signataire delegate supplémentaire, propriétaire destination frais, Token Records source/destination et ATA gelées validés à chaque transition ; - conserve
Delegate,Revoke,Lock,UnlocketTransferànot_runjusqu’au rerun Devnet complet de cette nouvelle campagne. pre.013-delta-fix-022corrige la frontièreFuture + Senddu runner Metaplex : les référencesSigner + Syncrestent publiques, mais leur effacement vers&dyn Signerest désormais confiné à un helper synchrone de signature et ne traverse plus aucunawait;- aligne la postcondition
Burnsur le comportement courant deMetadataV1: l'absence reste valide, et un compte résiduel n'est accepté que comme tombstone fee exactowner=Token Metadata, non exécutable, lamports positifs,space=1,data=[0x00]; les comptes token, Edition et Edition Marker doivent toujours être absents ; - enregistre que le rerun
fix-021atteintBurnet termine sa validation d'exécution avant cette seule garde sémantique, sans promouvoirPrint/Burntant que le bundleMETAPLEX_PRINT_BURN_*complet n'est pas émis. pre.013-delta-fix-021enregistre la deuxième tentativePrint -> Burn:Printest effectivement confirmé sur Devnet avec la signature2199PTvKyTAfnGRHVaaCceW4u8phdJSu5ULkceD9uJeQyjjenEupK9osRZu1Pzx2NuQaJnAwngSAXMvr5oNtf5y6au slot482068400, puis la campagne s’arrête sur la lecture stateful du compteEditionavant hydratation/replay/matérialisation ;Burnn’est pas atteint et la matrice conservePrint/Burnànot_run;- borne la voie multi-signataires publique à
Signer + Synctout en conservant la déclaration explicite, l’unicité et la présence réelle de chaque signataire ; la validation suivante montrera que l'effacement local versVec<&dyn Signer>doit encore être confiné pour rendre effectivement le futur TauriSend; - utilise
TemporaryWallet::as_sync_signer()pour le keypairedition_mintet corrige le warning Clippycloned_ref_to_slice_refsavecstd::slice::from_ref. pre.013-delta-fix-020conserve la première tentative réseauPrint -> Burncomme preuve de simulation négative :Prints’arrête avant soumission avecMetadataError::NotEnoughTokens(0x20) parce quefix-019précréait l’ATA d’édition vide alors que le chemin courant exigeamount=1pour un compte token déjà existant ; aucune lignePrint/Burnn’est promue ;- corrige la fixture en conservant seulement le keypair
edition_mintfrais et en exigeant que le mint et son ATA soient tous deux absents avantPrint, afin de laisser le programme courant créer le mint, créer l’ATA et frapper l’unique token imprimé ; - vérifie explicitement que l’ATA du master contient exactement un token avant
Print, conserve les deux absences fraîches dans le résumé de campagne et supprime le re-exportNativeFixturePreparationEvidencedevenu inutilisé ; pre.013-delta-fix-019enregistre la campagne collectionVerify -> Unverifyentièrement confirmée :Verifysignature39JwUoxF2WWYWvEEWzFxSmKZVwoqXD1wH78sgGaoXv2vZKYUsXDNNnKikeuyQcfCqDftEMHSKFDHnTeSQ3bRpFcJslot481936730, puisUnverifysignature4Kfv42BGZtuBEwqTie5RWwdQ772hyxKiU9d3F3gfRnwVNrxCs2iZMvwL17Rwmuyr3XCVoHdaJVgaqCwv8y7bKoZYslot481936742; les postconditions prouventverified false -> true -> falseet taille parent0 -> 1 -> 0, avec replay, matérialisation et idempotence complets ;- promeut
VerifyetUnverifyàconfirmedsur la famillecollectiondans la matrice Devnet v3 ; l’état réseau devient 4 opérationsconfirmedet 16not_run; - ajoute un runner Devnet
Print -> Burnsur un master NFTPrintSupply::Limited(1), un mint d’édition frais, l’Edition PDA et l’Edition Marker de l’édition 1 ;Printdoit prouver master supply0 -> 1, création Metadata/Edition/marker, mint imprimé supply0 -> 1et ATA amount1, puisBurndoit prouver supply imprimée1 -> 0, master supply1 -> 0et fermeture du token account, de l’Edition et de l’Edition Marker devenu vide, ainsi que fermeture sémantique de Metadata ; - ajoute une voie explicite
execute_devnet_metaplex_token_metadata_with_signers: les signataires supplémentaires doivent être déclarés dansadditional_authorized_signers, effectivement fournis, uniques et bornés ; l’API historique reste profil-wallet-only ; - prépare les fixtures NFT imprimables avec
PrintSupply::Limited(1)sans modifier les cinq profilsCreate -> Mintdéjà qualifiés, et conservePrint/Burnànot_runjusqu’au test Devnet opt-in complet. pre.013-delta-fix-018conserve la première tentative collection comme preuve partielle :Verifyest confirmé avec la signature2kR1VeWdCW3FcKRZdNuKMMc3kGUmWRBXxXX8W1NNi2rhWfZYTg9zsDvJHx7WvebgUfc2K382J14i66E2qPEnjsqRau slot481931061, mais le replay échoue avant matérialisation parce que le décodeur refusait le privilège writable global de l'autorité fee payer ; aucune promotion de matrice n'est effectuée avant rerun complet ;pre.013-delta-fix-017ferme la qualification multi-familleCreate -> Mint: le rerun pNFT confirmeCreateau slot481921980puisMintau slot481921994, avec Token Record présent, supply/amount0 -> 1et ATAInitialized(1) -> Frozen(2); la matrice v3 contient désormais cinq bundlesnft,sft,fungible,collectionetprogrammable_nftpourCreateetMint;- ajoute un runner Devnet réutilisable de collection parent-membre : Collection NFT parent
size=0, membre NFT initialementverified=false, puisVerify(CollectionV1)etUnverify(CollectionV1)avec postconditions ferméesverified false -> true -> falseet taille0 -> 1 -> 0; - permet aux fixtures
Createde déclarer uncollection_mintinitialement non vérifié sans modifier les cinq profils de base ; - verrouille le format stateful du parent sur la sérialisation SDK réelle
collection_details.V1.sizeet ajoute une régression empêchant un retour accidentel à une clé camelCase inexistante ; - retire
SetCollectionSizedu parcours synthétique courant de collection : la taille est une postcondition stateful dérivée du programme, l’opération obsolète n’est pas utilisée pour fabriquer la preuve ; - conserve
VerifyetUnverifyànot_runtant que le nouveau test Devnet opt-in n’a pas produit signatures, slots et evidence machine-readable. pre.013-delta-fix-016corrige la postcondition SPL de la variante pNFT : après unMintprogrammable confirmé, l’ATA classique est légitimementFrozen(AccountState=2) tandis que le Token Record Metaplex porte l’état programmable ; NFT/SFT/fungible/collection continuent d’exigerInitialized(AccountState=1) ;- la première tentative pNFT confirme déjà
Mintavec la signatureGkg5A6ehuSzkU1N318kYoRHm5RdxV2yBRpaK9Gwyt6vN1ToYwAS6Vzpk2rQYWS9NJz1rnUpypLCn7DqWFzQzxFcau slot481913765, amount1, owner et mint exacts, mais reste non promue car la campagne échoue ensuite sur l’ancienne attentestate=1; DevnetMetaplexCreateMintTokenStateetMETAPLEX_CREATE_MINT_EVIDENCEconservent désormais l’état SPL brut avant/aprèsMint, afin que la preuve pNFT encode explicitementInitialized(1) -> Frozen(2)en plus de la transition supply/amount.pre.013-delta-fix-015enregistre la campagne collectionCreate -> Mintentièrement confirmée :Createsignature3jpxyWuxQVyBtbvqDnV1oahLyxCXMw1zQQZBGCKgQSfn2TNcBaUdfvJ6kFa8zL3XJLMpM6tahQTnu8AUsTkYc3Dyslot481911942, puisMintsignature4WEciqZA5vmtrh1ZeSbqcgVnezUy7qT6B6utySfkg7dbAmhH6SMwwY862zGbzPW3nBVFzMjFVGPEhnTt6TcAiEe2slot481911955; les deux étapes terminent le pipeline de preuve complet avec deux snapshots stateful et supply/amount0 -> 1; la matrice v3 contient désormais les bundlesnft,sft,fungibleetcollectionpourCreate/Mint, et le test de matrice n’est plus figé sur les deux premières familles ;pre.013-delta-fix-014enregistre la campagne fungibleCreate -> Mintentièrement confirmée :Createsignature3J1Ebq9DVkupVFQmqQ84QaNeztwMuRwbtXj7CiyUWwZPj4KCAJpKLAbPvpYss5cdiY33foXXScWWZE98H7tvbZedslot481910724, puisMintsignature2GKiY9foLmioYtUHttA2D6nCSmsftRL1JDKxENHmCnb5w38FGSxwBiRNMfF7mH8htv3G45irmge6DVtr6VN359j2slot481910734; chaque étape matérialise une ligne etMintfait passer supply/amount de0à1_000_000_000sur un mint à 9 décimales ; la matrice v3 conserve désormais trois bundlesnft,sftetfungiblepourCreateetMint, tandis que collection et pNFT restent à exécuter ;pre.013-delta-fix-013enregistre la campagne SFTCreate -> Mintentièrement confirmée :Createsignature2s81m6k9HYDLmCy7oXKaqBvtb62iyX4bJmij2f2VjHuoRQBBA6YqRuAsjyaM7JCaJXasbU3WCfiko91cZcDLLdxVslot481908028, puisMintsignature4pAemhEJewuLAeqLkqwzPvVmsCRbkyLiN6uAUWBA5RMsofaEDt5Xr8YGiBEvLWQM7Qvxnd81mmCHpandmfmWuyAmslot481908039; chaque étape matérialise une ligne etMintfait passer supply/amount de0à10;- fait évoluer la matrice Devnet en version 3 afin de stocker une preuve complète distincte par famille au lieu d’agréger plusieurs signatures, slots et message hashes dans une seule liste d’évidence ;
CreateetMintrestent les deux seules opérationsconfirmed, désormais observées surnftetsft, tandis que les 18 autres opérations restentnot_run; pre.013-delta-fix-012enregistre la première campagne NFTCreate -> Mintentièrement confirmée :CreatesignatureokwkuQFp7yVguYW7GEY9Chv6ochM8TWBEeCGV1gu5Waku9wQvMfrKjkig6JxXBwpKoFTECignzJ8HFf8dLtpsvSslot481904731, puisMintsignature3hSizfdvezyFpfhqX4Za4wmhdMHhSPAisFvYjFAxpRzYcUXhryxCzc9qpwod3Yjm6GmijXTGjjDUuVksfpBzLwz1slot481904744; chaque étape produit une matérialisation etMintfait passer supply/amount de0à1;- promeut
CreateetMintàconfirmedsur la famille NFT dans la matrice Devnet v2, conserve les 18 autres opérations ànot_runet exige désormais des preuves observées complètes pour toute ligneconfirmed; - conserve le slot RPC de simulation dans
DevnetMetaplexTokenMetadataExecutionSummaryet imprime une ligneMETAPLEX_CREATE_MINT_EVIDENCEmachine-readable avec genesis hash, slot de simulation, message hash, fee, confirmation et état du pipeline pour les futures campagnes SFT/fungible/collection/pNFT ; pre.013-delta-fix-011corrige la postcondition SPL de la campagneCreate -> Mint: lorsqu’une famille demande une Master Edition,Createtransfère légitimement les mint/freeze authorities vers le PDA Master Edition ; SFT et fungible conservent l’autorité opérateur ;- supprime le helper
read_token_accountdevenu inutilisé et élimine le warningdead_codeobservé aprèsfix-010; - conserve signature + slot dans toute erreur SPL postérieure à un
CreateouMintdéjà confirmé afin qu’une preuve pipeline complète ne soit plus perdue par une postcondition ultérieure ; - corrige l’interprétation de la tentative précédente : le mismatch d’autorité n’était pas une preuve de fixture stale.
fix-010reste un durcissement fresh-only valide, mais le chemin de campagne montre que l’erreur était atteinte aprèsCreate. La tentative suivantfix-010franchit mêmevalidate_confirmed_execution("create", ...), donc replay, matérialisation et idempotence ont réussi avant la postcondition SPL ; signature et slot n’ayant pas été imprimés, la matrice reste néanmoinsnot_run. pre.013-delta-fix-010rend la fixtureCreate -> Mintstrictement fraîche : le mint keypair est créé avecTemporaryWalletStore::createau lieu deload_or_create, son adresse doit être absente de Devnet avant préparation, puis le mint et l’ATA sont relus àminContextSlotégal au slot confirmé de la transaction native ;fix-010a initialement été motivé par un mismatch d’autorité3RJXuBF6xB3j47EeAHEBbcwvV66rJrkhmJvYNr36jz8xcontre l’opérateurJ12WA6c42oqpWkLu1dFa4pCegkQJPpxabwc3RRCMSUuH; le réaudit defix-011corrige cette interprétation : la postcondition était exécutée aprèsCreateet observait le transfert normal des autorités vers le PDA Master Edition ;pre.013-delta-fix-009enregistre la troisième tentative NFT :Createest confirmée sur Devnet avec la signature51MXdFFFNY7UTS23cmfCQBfrDKC99uk5Trtw2gkptvEug9aWJ2R1cE9Ta5QHbe4kS1NYgRUSSMmmdbqdhyxxnR4Yau slot481882374, puis la post-validation échoue uniquement au replay instructionnel ;- relie cet échec au contrat trop strict du décodeur
Create/Mint, qui confondait flags positionnels et privilèges globaux de transaction, et ajoute un diagnostic compact des compteursDecodeReplaySummarylorsqu’un replay reste incomplet ; - conserve
CreateetMintànot_runtant que replay, matérialisation et idempotence ne sont pas tous démontrés. pre.013-delta-fix-008corrige la seconde tentative NFTCreate -> Mint: les snapshots Metaplex utilisaient encore la borne pipeline historique de1 MiB, alors que le transport refuse une lecture complètegetAccountInfoau-delà de65536octets ;- utilise désormais la borne stateful commune du transport dans tous les snapshots
Create -> Mintet verrouille cette valeur par test ; - enrichit une éventuelle erreur post-exécution restante avec la signature et le slot déjà confirmés afin de ne plus perdre l'identité d'une transaction ayant atteint la post-validation ;
- conserve les 20 opérations à
not_runjusqu'à une campagne terminée avec preuves exploitables. pre.013-delta-fix-007réorganise la crate par domaines stables (metadata/solana_program,metadata/metaplex_token_metadata,spl/associated_token_account,spl/memo,spl/token,spl/token_2022etspl/token_2022/metadata) sans modifier les exports publics de crate-root ;- supprime les noms de modules racine historiques et incohérents
metadata_solana_program_*,solana_metaplex_token_metadata_*,solana_token_2022_*ettoken_2022_*au profit d'une arborescence correspondant aux domaines du workspace ; - corrige le warning Clippy
cloned_ref_to_slice_refsdu test de borneminContextSlotavecstd::slice::from_ref; - durcit la sélection des preuves de matérialisation Metaplex : les lignes sont désormais retenues par l'identité du matérialiseur
MtMetadataMetaplexTokenMetadataMaterializeret non par une chaîne de nom de décodeur ; - enrichit l'erreur
Create -> Mintavec les booléens post-exécution, les nombres de lignes/snapshots et les diagnostics accumulés afin qu'une nouvelle tentative Devnet distingue immédiatement hydratation, extraction, replay ou matérialisation manquante ; - conserve
CreateetMintànot_run: la première tentative NFT defix-006a atteint la post-validation mais a été interrompue parmetaplex_create_mint_post_execution_incompleteavant émission d'une preuve exploitable ; pre.013-delta-fix-006ajoute une campagne Devnet réutilisable et bornéeCreate -> Mintexécutée une famille à la fois (nft,sft,fungible,collectionouprogrammable_nft) ;- lie désormais toutes les lectures Metaplex postcondition au slot de confirmation de la transaction via
minContextSlot, afin queafter_statene puisse pas provenir d’un contexte antérieur ; - exige pour
CreateetMintsimulation réussie, confirmation, hydratation canonique, extraction Core, replay, matérialisation, seconde passe idempotente et snapshots Metaplex attendus ; - relit en plus le mint SPL classique et l’ATA au slot confirmé : supply et amount doivent rester nuls après
Create, puis devenir exactementmint_amount_rawaprèsMint; - exige la présence du master edition pour NFT/collection/pNFT et du token record après
Mintpour pNFT, sans précréer ces preuves dans la fixture ; - conserve les 20 opérations de la matrice réseau à
not_runjusqu’à l’exécution réelle de la nouvelle campagne ; pre.013-delta-fix-005prépare désormais, dans la même transaction native, le mint SPL classique et l’ATA canonique de l’opérateur, tout en conservant une supply nulle avant l’opération MetaplexMint;- ajoute au résumé de fixture l’ATA, le token record pNFT éventuel, le montant brut par famille et un JSON
Minttypé prêt à exécuter aprèsCreate; - vérifie après confirmation le layout exact du mint et de l’ATA classique, notamment mint, owner, amount=0, état initialisé et taille 165 octets ;
- dérive le token-record PDA uniquement pour pNFT et verrouille hors réseau les montants
Mint: NFT/collection/pNFT=1, SFT=10 et fungible=1_000_000_000 à 9 décimales ; - conserve les 20 opérations Metaplex à
not_run: ce correctif prépare les préconditions token accounts/supply mais ne transforme aucune fixture en preuve Devnet ; pre.013-delta-fix-002rend les fixturesCreateréellement cohérentes avec les cinq familles Devnet : NFT, SFT et collection restent à 0 décimale, tandis que le mint fongible est préparé à 9 décimales ;- déplace la sélection du
TokenStandard, decollection_details, demaster_editionet deprint_supplydepuis l’adaptateur desktop vers la fixture réutilisable afin que CLI, tests et futures campagnes consomment le même contrat ; - vérifie hors réseau que les cinq JSON
Createse désérialisent versExMetaplexTokenMetadataOperation::Createet que seules les familles NFT, collection et pNFT demandent une master edition ; pre.013-delta-fix-001corrige le test Devnet opt-in pour la signature actuelle dePostgresStoreOptions::new(database_url, max_connections, connect_timeout_ms, auto_initialize_schema)et conserve le timeout de cinq secondes sous forme5_000ms ;- réaudite Metaplex Token Metadata contre l’IDL historique de 58 instructions, la matrice d’exécution et la surface SDK actuelle : 20 opérations courantes, 15 obsolètes exécutables sous approbation explicite, 22 remplacées en décodage uniquement et une frontière Bubblegum ;
- rouvre
METAPLEX_TOKEN_METADATA_DEVNET_EXECUTION_MATRIX.jsonsous0.4.8-pre.013sans inventer de preuve réseau : les 20 opérations courantes restent initialementnot_run; - corrige le runner Devnet Metaplex afin d’exécuter réellement la post-validation déjà déclarée par sa policy : hydratation canonique, extraction Core, replay, matérialisation et seconde passe d’idempotence ;
- expose dans le résumé les rapports de backfill, extraction, replay, idempotence, les matérialisations instructionnelles et le diagnostic agrégé ;
- borne les retries de post-validation à 20 et exige PostgreSQL dans le test Devnet opt-in dès qu’une exécution réelle est demandée ;
- conserve comme travail restant de la même prerelease les fixtures spécialisées et les preuves réseau des opérations autres que
CreateetUpdateAsUpdateAuthorityV2.
0.4.8-pre.012
- corrige le delta initial en déclarant explicitement
bs58.workspace = true, utilisé directement par les fixtures et gardes Token-2022 de la crate ; - confirme sur Devnet les cinq opérations Token Metadata de la campagne avec cinq signatures, cinq slots et des postconditions
Confirmed; - conserve pour
EmitunreturnDatacomplet de 202 octets validé contre le snapshot TLV autoritatif ; - promeut les cinq scénarios de
SPL_TOKEN_2022_METADATA_DEVNET_VALIDATION_MATRIX.jsonàconfirmedavec leurs preuves réelles ; - clôt les TODO opérateur de
pre.012aprèscargo fmt,cargo check --workspace,cargo clippy --all-targets, audit workspace, tests de crate etcargo test --workspaceréussis ; - ajoute une fixture native de mint Token-2022 avec
MetadataPointerauto-référent initialisé avantInitializeMint2; - préfinance le mint pour les réallocations du TLV Token Metadata atteintes par la campagne ;
- ajoute une campagne Devnet ordonnée
Initialize → UpdateField → Emit → RemoveKey → UpdateAuthorityavec simulation, soumission autorisée, confirmation, hydratation, replay, matérialisation et postconditions stateful ; - étend le préflight générique Token-2022 aux opérations Token Metadata et n’exige aucune matérialisation instructionnelle pour
Emit; - ajoute une matrice réseau conservative à cinq scénarios, initialement intégralement
not_run; - ajoute un test Devnet opt-in avec sortie structurée des signatures, slots, postconditions et octets de
returnData.
0.4.8-pre.011
- adapte la fixture synthétique de simulation au nouveau champ optionnel
return_datadu contrat commun ; - promeut les neuf lignes Solana Program Metadata à
confirmedavec les preuves des deux campagnes Devnet finales depre.010.
0.4.8-pre.009 — scénarios Devnet Solana Program Metadata
-
déplace
SetAuthoritydu compte Metadata non canonique vers le Buffer non canonique, conformément au processeur officiel qui refuse cette opération sur les metadata non canoniques ; -
réconcilie l’ordre des neuf étapes, la fixture, la matrice Devnet et les tests de campagne ;
-
ajoute une régression garantissant que
SetAuthorityne cible jamais le compte Metadata non canonique de la fixture ; -
réutilise l’unique cible canonique
ks-pipeline-demo-scenariospour les logs de fixture et supprime la seconde constante incompatible avec la convention de logging de la crate ; -
corrige les derniers diagnostics Clippy des tests :
str::len()direct pour les seeds UTF-8 etreturnexplicite dans la closure de statut de validation ; -
corrige les tests de réconciliation des opérations : comparaison de références
&stret durée de vie de l’inventaire de scénarios ; -
documente la crate du test d’API publique externe afin de conserver
missing_docspropre ; -
ajoute deux parcours ordonnés couvrant exactement les neuf opérations stables de
ProgM6…; -
prépare deux PDA non canoniques préfinancés, un
Bufferet un compteMetadata, à partir du wallet persistant du profil Devnet ; -
ajoute un runner simulation-first avec préflight stateful,
ExSafetyChecker, signature, soumission, confirmation, lectures avant/après et matérialisation des snapshots ; -
ajoute une campagne confirmée réutilisable qui exécute les neuf étapes sans déplacer l’orchestration dans le desktop ;
-
distingue la preuve
materialized_snapshotde la preuve terminaleaccount_absenceaprèsClose; -
ajoute une matrice conservative dont tous les statuts réseau restent
not_runavant exécution réelle ; -
conserve
ks-pipelineindépendant de cette crate et ne modifie pas encoredemo_execution_metadata.
0.4.7-pre.016
- généralise README et USAGE autour des groupes fonctionnels ;
- nettoie le TODO et conserve les fixtures Devnet spécialisées comme dette explicite ;
- qualifie séparément builders disponibles et preuves réseau observées.
0.4.7-pre.015
- étend le parcours NFT Devnet à une troisième étape
UpdateAsUpdateAuthorityV2qui rend les metadata immutables ; - distingue l’édition maître créée par
Createdes futures fixtures d’édition imprimée ; - conserve
PrintetBurncomme étapes ultérieures tant que leurs comptes SPL et édition ne sont pas préparés de bout en bout.
0.4.7-pre.014
- Expose cinq parcours Metaplex Devnet préparables : NFT, SFT, fungible, collection parent et pNFT sans rule set.
- Conserver un cycle borné
Create -> UpdateAsUpdateAuthorityV2pour chaque famille avant d'étendre les opérations spécialisées.
0.4.7-pre.013-fix-014
- crée un nouveau mint natif pour chaque nouvelle préparation
Create, afin de ne jamais réutiliser un PDA metadata déjà créé ; - limite l’inventaire Devnet visible au parcours NFT
create -> updateréellement préparé de bout en bout ; - conserve les cinq parcours synthétiques comme matrice cible sans les présenter comme exécutables sur Devnet.
0.4.7-pre.013-fix-013
- retire l’appel résiduel à
ExSplTokenExecutordans la préparation native du mint Metaplex ; - construit directement l’instruction officielle
spl_token_interface::instruction::initialize_mint2; - ajoute cette instruction au plan composite
SystemCreateAccount + InitializeMint2sans falsifier les exigences de post-validation de l’exécuteur SPL ; - ajoute les dépendances directes
solana-instructionetspl-token-interfaceà la crate de scénarios ; - conserve la simulation exacte, les deux signatures, la confirmation et la relecture on-chain du mint.
0.4.7-pre.013-fix-012
- aligne la fixture Rust native sur les APIs publiques réelles du workspace ;
- évalue le
ExApiPreparedExecutionPlanavecevaluate_prepared_plan; - conserve
MdSignaturepour l’envoi et la confirmation, puis retourne sa valeur chaîne ; - convertit la clé du mint en
MdPubkeypourgetAccountInfo; - supprime l’avertissement du paramètre de rent conservé dans le contrat de politique.
0.4.7-pre.013-fix-011
- remplace la préparation Metaplex fondée sur
solana-keygen,solanaetspl-tokenpar une transaction Rust native ; - crée le mint par
SystemCreateAccountpuisSPL Token InitializeMint2dans 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
ks-walletsans exposer ni déléguer ses secrets à une CLI externe.
0.4.7-pre.013-fix-010
- adapte la création de la fixture NFT à la CLI
spl-tokeninstallée, qui ne prend pas en chargecreate-token --freeze-authority; - crée le mint avec
--enable-freeze, puis transfère explicitement les autoritésfreezeetmintau wallet du profil ; - versionne la fixture en
create-mint-profile-authority-v4.jsonafin de ne pas réutiliser un mint incomplet issu du fix précédent.
0.4.7-pre.013-fix-009
- remplace l’inventaire Metaplex plat par cinq parcours cohérents avec fixture, état initial, état attendu et cibles de matérialisation ;
- ajoute la matérialisation optionnelle des snapshots confirmés ;
- crée la fixture NFT
v3avec mint authority et freeze authority détenues par le wallet du profil ; - interdit une matérialisation demandée sans lecture de postcondition.
0.4.7-pre.013-fix-007
- fournit explicitement le Program ID SPL Token classique dans le modèle et la fixture
CreateNFT ; - ajoute des assertions empêchant le retour de
spl_token_program: nullpour ce parcours ; - conserve
PrintSupply::Zeroet les PDA dérivés depuis le mint préparé.
0.4.7-pre.013-fix-006
- corrige le modèle et la fixture
CreateNFT avecPrintSupply::Zero; - ajoute un test garantissant que le modèle JSON nommé ne réintroduit pas un
print_supplyabsent.
0.4.7-pre.013-fix-003
- Ajout du guide intégré, du journal d’exécution et de titres explicites pour les résultats JSON Metaplex.
- Ajout d’un préparateur idempotent de fixture
Create: mint SPL classique Devnet, PDA metadata et master edition dérivés, intent JSON prêt à simuler.
0.4.7-pre.012-fix-003
- ajout explicite de la dépendance workspace
mpl-token-metadatarequise par les modèles et constructeurs de scénarios ; - alignement du test de placeholder sur le code stable
configréellement exposé parks_core::Error::config; - validation locale : formatage, workspace check, clippy et audits propres ; 53 tests de bibliothèque réussis avant correction de l’assertion, un seul test échouant sur le code attendu.
0.4.7-pre.012-fix-002
- rejet explicite des placeholders
...dans le JSON d’opération Metaplex ; - inventaire public des vingt opérations courantes acceptées par les campagnes automatiques ;
- modèles JSON structurés pour
Create,Update,VerifyetUnverify; - constructeurs nommés pour les parcours créateur
VerifyetUnverify; - documentation corrigée afin de ne plus présenter un placeholder comme une commande exécutable.
0.4.7-pre.012 — couverture du runner Devnet Metaplex
- passage de la matrice Devnet à
0.4.7-pre.012; - fermeture du statut
implementedpour les 20 opérations courantes ; - ajout d’un constructeur de requête depuis le JSON typé
ExMetaplexTokenMetadataOperation; - ajout d’un test Devnet opt-in piloté par variables d’environnement pour simuler ou soumettre n’importe quelle opération courante ;
- maintien des statuts réseau à
not_runtant qu’aucune exécution locale n’a fourni les preuves attendues. - correction du contrat stateful partagé afin que les lectures préflight et postcondition soient désérialisables depuis les variables JSON du test Devnet opt-in.
0.4.7-pre.011 — réouverture des campagnes Devnet Metaplex
Exécution Devnet
- ajout d’un exécuteur Metaplex Devnet réel, simulation-first et limité aux opérations non dépréciées ;
- contrôle du genesis hash Devnet, du wallet de profil, des signers et des plafonds de coût ;
- ajout des lectures stateful avant/après, du préflight, de la simulation RPC exacte, de la soumission contrôlée et de la confirmation ;
- ajout d’une matrice fermée des 20 opérations courantes, avec
Create,Update,VerifyetUnverifyattribuées au premier lotpre.011; - conservation de tous les statuts réseau à
not_runtant qu’aucune preuve locale n’a été observée.
Documentation
- réorganisation des quatre documents de crate ;
- ajout des lots
pre.011etpre.012au TODO pour couvrir les 20 opérations courantes sur Devnet ; - clarification du rôle ciblé du CLI et du maintien des scénarios UI dans le desktop.
0.4.7-pre.010 — corpus de validation croisée
- ajout d’un corpus fermé couvrant outer/CPI, succès/échec, cinq familles d’actifs et neuf classes d’erreur ;
- ajout de contrats distincts de preuve réseau pour simulation, soumission et postcondition ;
- refus de toute promotion réseau fondée uniquement sur des preuves synthétiques.
0.4.7-pre.009
- ajout de l’inventaire Metaplex Devnet simulation et de son test de couverture.
0.4.7-pre.008
- ajout des scénarios synthétiques NFT, SFT, token fongible, collection et pNFT ;
- ajout de la matrice de validation Devnet/Testnet ;
- conservation du CLI sans commande Metaplex non justifiée.
0.4.6
- alignement de la crate sur la version fonctionnelle bot3
0.4.6; - clôture des tâches de migration applicables et report explicite des évolutions ultérieures dans le TODO.
0.1.0-pre.075
- ajout du guide opérateur Devnet
0.4.6distinguant les scénarios de validation des composants réutilisables ;
0.1.0-pre.073
- ajout du guide transversal
docs/guides/DEVNET_VALIDATION.md;
0.1.0-pre.072
- reclassement du TODO selon les blocants avant
0.4.6, les travaux0.4.7, les versions ultérieures et les dépendances conditionnelles.
0.1.0-pre.070
- enrichissement du
USAGE.mdavec plusieurs exemples couvrant les principales familles d’API publiques ; - ajout du contrat documentaire de la crate mixte ;
- inventaire des scénarios publics et du binaire CLI ;
- documentation des tests Devnet comme références d’exécution réelle ;
- classement des travaux d’autonomie CLI, fixtures et Metaplex dans le TODO.
0.1.0-pre.062
- extraction des scénarios de démonstration hors du desktop ;
- conservation du nom de bibliothèque
ks_pipeline_demo_scenarios; - création du binaire explicite
ks-pipeline-demo-scenarios-cliavecautobins = false; - migration des scénarios System Transfer, Memo v4, ATA, SPL Token et Token-2022 ;
- validation connue de 39 tests de bibliothèque et 1 test de binaire.