v0.4.7-pre.015

This commit is contained in:
2026-08-04 21:32:09 +02:00
parent b358b12f3b
commit 40d831f84d
7 changed files with 117 additions and 27 deletions

View File

@@ -1,8 +1,13 @@
<!-- file: kb-app-demo-desktop/CHANGELOG.md -->
<!-- version: 22 -->
<!-- version: 23 -->
# CHANGELOG — kb-app-demo-desktop
## 0.4.7-pre.15
- expose létape NFT « rendre les metadata immutables » dans le runner cohérent ;
- prépare cette étape depuis le contexte confirmé de létape précédente ;
- maintient les lectures de postcondition et la matérialisation sur le PDA metadata.
## 0.4.7-pre.014
- Afficher les cinq parcours Metaplex Devnet dans le runner Metadata.

View File

@@ -1,5 +1,5 @@
// file: kb-app-demo-desktop/src/demo_execution_metadata.rs
// version: 13
// version: 14
//! Thin desktop adapters for metadata execution demo scenarios.
@@ -475,7 +475,8 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
std::option::Option::Some(value) if !value.trim().is_empty() => value,
_ => {
return std::result::Result::Err(
"prepare and submit the Create step before preparing Update".to_string(),
"prepare and submit the previous NFT lifecycle step before continuing"
.to_string(),
);
},
};
@@ -494,7 +495,7 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
return match previous_value.get(name).and_then(serde_json::Value::as_str) {
std::option::Option::Some(value) => std::result::Result::Ok(value.to_string()),
std::option::Option::None => std::result::Result::Err(format!(
"previous Create step does not contain `{name}`"
"previous scenario step does not contain `{name}`"
)),
};
};
@@ -506,14 +507,18 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let master_edition = match string_field("master_edition") {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let authority = match string_field("authority") {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(error),
};
let master_edition =
match previous_value.get("master_edition").and_then(serde_json::Value::as_str) {
std::option::Option::Some(value) => value.to_string(),
std::option::Option::None => std::string::String::new(),
};
let immutable_transition = scenario.asset_family
== kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Nft
&& step_index == 2;
let value = serde_json::json!({
"operation": "update_as_update_authority_v2",
"authority": authority.clone(),
@@ -527,8 +532,16 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
"AsUpdateAuthorityV2": {
"new_update_authority": null,
"data": null,
"primary_sale_happened": true,
"is_mutable": null,
"primary_sale_happened": if immutable_transition {
serde_json::Value::Null
} else {
serde_json::json!(true)
},
"is_mutable": if immutable_transition {
serde_json::json!(false)
} else {
serde_json::Value::Null
},
"collection": "None",
"collection_details": "None",
"uses": "None",
@@ -543,7 +556,11 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
metadata,
master_edition,
crate::pretty_json(&value),
"metadata_created".to_string(),
if immutable_transition {
"metadata_immutable".to_string()
} else {
"metadata_created".to_string()
},
)
};
let metadata_read = serde_json::json!({
@@ -580,7 +597,14 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
scenario_id: scenario.id,
step_index,
operation: operation.clone(),
label: format!("Étape {} — {}", step_index + 1, operation),
label: if scenario.asset_family
== kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Nft
&& step_index == 2
{
"Étape 3 — rendre les metadata immutables".to_string()
} else {
format!("Étape {}{}", step_index + 1, operation)
},
operation_json,
preflight_reads_json: crate::pretty_json(&preflight_reads),
postcondition_reads_json: crate::pretty_json(&postcondition_reads),