v0.2.6-pre.018-fix.001
This commit is contained in:
@@ -6,7 +6,7 @@ resolver = "3"
|
|||||||
members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"]
|
members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.2.6-pre.18"
|
version = "0.2.6-pre.18.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "ksp-app-config-desk",
|
"name": "ksp-app-config-desk",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.2.6-pre.18",
|
"version": "0.2.6-pre.18.fix.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "KSP Config Desk",
|
"productName": "KSP Config Desk",
|
||||||
"version": "0.2.6-pre.18",
|
"version": "0.2.6-pre.18.fix.1",
|
||||||
"identifier": "com.sasedev.ksp-app-config-desk",
|
"identifier": "com.sasedev.ksp-app-config-desk",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": {
|
"beforeDevCommand": {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-app-config-desk/tests/desktop_contract.rs
|
// file: crates/ksp-app-config-desk/tests/desktop_contract.rs
|
||||||
// version: 5
|
// version: 6
|
||||||
|
|
||||||
//! Desktop build/shell contract audits for Config Desk.
|
//! Desktop build/shell contract audits for Config Desk.
|
||||||
|
|
||||||
@@ -103,8 +103,11 @@ fn pre_014_template_uses_sidebar_navigation_and_kbot_style_splash_contract() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn pre_018_packaged_runtime_bundles_config_resources_and_activates_shared_writable_root() {
|
fn pre_018_packaged_runtime_bundles_config_resources_and_activates_shared_writable_root() {
|
||||||
let root = app_root();
|
let root = app_root();
|
||||||
|
let expected_version = env!("CARGO_PKG_VERSION");
|
||||||
let tauri = read_json(root.join("tauri.conf.json").as_path());
|
let tauri = read_json(root.join("tauri.conf.json").as_path());
|
||||||
assert_eq!(tauri.pointer("/version").and_then(serde_json::Value::as_str), std::option::Option::Some("0.2.6-pre.18"));
|
assert_eq!(tauri.pointer("/version").and_then(serde_json::Value::as_str), std::option::Option::Some(expected_version));
|
||||||
|
let package = read_json(root.join("package.json").as_path());
|
||||||
|
assert_eq!(package.pointer("/version").and_then(serde_json::Value::as_str), std::option::Option::Some(expected_version));
|
||||||
let resources = tauri.pointer("/bundle/resources").and_then(serde_json::Value::as_object);
|
let resources = tauri.pointer("/bundle/resources").and_then(serde_json::Value::as_object);
|
||||||
assert!(resources.is_some(), "packaged Config resources map must exist");
|
assert!(resources.is_some(), "packaged Config resources map must exist");
|
||||||
if let std::option::Option::Some(resources) = resources {
|
if let std::option::Option::Some(resources) = resources {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: crates/ksp-app-wallet-desk/frontend/main.html -->
|
<!-- file: crates/ksp-app-wallet-desk/frontend/main.html -->
|
||||||
<!-- version: 3 -->
|
<!-- version: 4 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
<h1 id="viewTitle" class="h3 mb-1">Dashboard</h1>
|
<h1 id="viewTitle" class="h3 mb-1">Dashboard</h1>
|
||||||
<p class="text-body-secondary mb-0">Identité autorisée et balance SOL via le Transport HTTP composite sont actives.</p>
|
<p class="text-body-secondary mb-0">Identité autorisée et balance SOL via le Transport HTTP composite sont actives.</p>
|
||||||
</div>
|
</div>
|
||||||
<span class="badge text-bg-secondary">0.2.6-pre.18</span>
|
<span class="badge text-bg-secondary">0.2.6-pre.18.fix.1</span>
|
||||||
</div>
|
</div>
|
||||||
<section data-view-panel="dashboard">
|
<section data-view-panel="dashboard">
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "ksp-app-wallet-desk",
|
"name": "ksp-app-wallet-desk",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.2.6-pre.18",
|
"version": "0.2.6-pre.18.fix.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "KSP Wallet Desk",
|
"productName": "KSP Wallet Desk",
|
||||||
"version": "0.2.6-pre.18",
|
"version": "0.2.6-pre.18.fix.1",
|
||||||
"identifier": "com.sasedev.ksp-app-wallet-desk",
|
"identifier": "com.sasedev.ksp-app-wallet-desk",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": {
|
"beforeDevCommand": {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-app-wallet-desk/tests/desktop_contract.rs
|
// file: crates/ksp-app-wallet-desk/tests/desktop_contract.rs
|
||||||
// version: 20
|
// version: 21
|
||||||
|
|
||||||
//! Desktop build, shell and Config-status contract audits for Wallet Desk.
|
//! Desktop build, shell and Config-status contract audits for Wallet Desk.
|
||||||
|
|
||||||
@@ -421,10 +421,11 @@ fn pre_017_wallet_desk_open_paths_remain_non_migrating() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn pre_018_packaged_runtime_bundles_config_resources_and_keeps_wallet_desk_version_current() {
|
fn pre_018_packaged_runtime_bundles_config_resources_and_keeps_wallet_desk_version_current() {
|
||||||
let root = app_root();
|
let root = app_root();
|
||||||
|
let expected_version = env!("CARGO_PKG_VERSION");
|
||||||
let tauri = read_json(root.join("tauri.conf.json").as_path());
|
let tauri = read_json(root.join("tauri.conf.json").as_path());
|
||||||
assert_eq!(tauri.pointer("/version").and_then(serde_json::Value::as_str), std::option::Option::Some("0.2.6-pre.18"));
|
assert_eq!(tauri.pointer("/version").and_then(serde_json::Value::as_str), std::option::Option::Some(expected_version));
|
||||||
let package = read_json(root.join("package.json").as_path());
|
let package = read_json(root.join("package.json").as_path());
|
||||||
assert_eq!(package.pointer("/version").and_then(serde_json::Value::as_str), std::option::Option::Some("0.2.6-pre.18"));
|
assert_eq!(package.pointer("/version").and_then(serde_json::Value::as_str), std::option::Option::Some(expected_version));
|
||||||
let resources = tauri.pointer("/bundle/resources").and_then(serde_json::Value::as_object);
|
let resources = tauri.pointer("/bundle/resources").and_then(serde_json::Value::as_object);
|
||||||
assert!(resources.is_some(), "packaged Wallet Desk Config resources map must exist");
|
assert!(resources.is_some(), "packaged Wallet Desk Config resources map must exist");
|
||||||
if let std::option::Option::Some(resources) = resources {
|
if let std::option::Option::Some(resources) = resources {
|
||||||
@@ -439,7 +440,7 @@ fn pre_018_packaged_runtime_bundles_config_resources_and_keeps_wallet_desk_versi
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
let main = read_text(root.join("frontend/main.html").as_path());
|
let main = read_text(root.join("frontend/main.html").as_path());
|
||||||
assert!(main.contains("0.2.6-pre.18"));
|
assert!(main.contains(expected_version));
|
||||||
let tauri_source = read_text(root.join("src/tauri.rs").as_path());
|
let tauri_source = read_text(root.join("src/tauri.rs").as_path());
|
||||||
assert!(tauri_source.contains("ksp_config_lib::prepare_packaged_runtime"));
|
assert!(tauri_source.contains("ksp_config_lib::prepare_packaged_runtime"));
|
||||||
assert!(tauri_source.contains("tauri::utils::platform::resource_dir"));
|
assert!(tauri_source.contains("tauri::utils::platform::resource_dir"));
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-app-wallet-desk/tests/release_compliance.rs
|
// file: crates/ksp-app-wallet-desk/tests/release_compliance.rs
|
||||||
// version: 4
|
// version: 5
|
||||||
|
|
||||||
//! Release-wide deterministic compliance canaries for Wallet Desk.
|
//! Release-wide deterministic compliance canaries for Wallet Desk.
|
||||||
|
|
||||||
@@ -208,7 +208,7 @@ fn packaged_resources_include_only_registered_config_sources_and_schemas() {
|
|||||||
};
|
};
|
||||||
assert!(source.starts_with("../../config/"));
|
assert!(source.starts_with("../../config/"));
|
||||||
assert!(destination.starts_with("config/"));
|
assert!(destination.starts_with("config/"));
|
||||||
for forbidden in [".env", "wallets", "logs", "secret", "private"] {
|
for forbidden in [ksp_config_lib::DEFAULT_DOTENV_PATH, "wallets", "logs", "secret", "private"] {
|
||||||
assert!(!source.contains(forbidden), "mutable/secret runtime resource must not be bundled: {source}");
|
assert!(!source.contains(forbidden), "mutable/secret runtime resource must not be bundled: {source}");
|
||||||
assert!(!destination.contains(forbidden), "mutable/secret runtime destination must not be bundled: {destination}");
|
assert!(!destination.contains(forbidden), "mutable/secret runtime destination must not be bundled: {destination}");
|
||||||
}
|
}
|
||||||
|
|||||||
121
deltas/0.2.6/pre.018-fix.001.md
Normal file
121
deltas/0.2.6/pre.018-fix.001.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<!-- file: deltas/0.2.6/pre.018-fix.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta `0.2.6-pre.018-fix.001` — ownership Config du canari resources et resynchronisation candidate
|
||||||
|
|
||||||
|
## Base requise
|
||||||
|
|
||||||
|
```text
|
||||||
|
0.2.6-pre.018 appliquée
|
||||||
|
workspace.package.version = 0.2.6-pre.18
|
||||||
|
```
|
||||||
|
|
||||||
|
Le gate opérateur du 22 août 2026 confirme :
|
||||||
|
|
||||||
|
```text
|
||||||
|
cargo fmt --all OK
|
||||||
|
python3 scripts/audit_rust_workspace_rules.py clean
|
||||||
|
cargo check --workspace OK
|
||||||
|
cargo clippy --workspace --all-targets OK
|
||||||
|
cargo test -p ksp-wallet-lib 84 passed / 1 ignored
|
||||||
|
cargo test -p ksp-app-config-desk OK
|
||||||
|
cargo test -p ksp-app-wallet-desk OK
|
||||||
|
```
|
||||||
|
|
||||||
|
`cargo test -p ksp-config-lib` puis `cargo test --workspace` échouent toutefois sur le canari d'ownership :
|
||||||
|
|
||||||
|
```text
|
||||||
|
workspace_crates_do_not_hardcode_config_managed_physical_files
|
||||||
|
```
|
||||||
|
|
||||||
|
La cause est locale à `crates/ksp-app-wallet-desk/tests/release_compliance.rs` : le nouveau test de resources de `pre.018` recopie littéralement le nom physique du dotenv alors que KSP-CONFIG impose que ce nom reste possédé par `ksp-config-lib`.
|
||||||
|
|
||||||
|
Le `cargo tauri build` lancé ensuite a techniquement produit les bundles `.deb`, `.rpm` et `.AppImage`, mais **ne constitue pas la preuve finale de release**, puisque le gate Rust précédent était rouge. Il devra être rejoué après ce fix et redevenir l'absolue dernière opération.
|
||||||
|
|
||||||
|
## Signal technique
|
||||||
|
|
||||||
|
```text
|
||||||
|
workspace.package.version = 0.2.6-pre.18.fix.1
|
||||||
|
package.json Config Desk = 0.2.6-pre.18.fix.1
|
||||||
|
package.json Wallet Desk = 0.2.6-pre.18.fix.1
|
||||||
|
tauri.conf Config Desk = 0.2.6-pre.18.fix.1
|
||||||
|
tauri.conf Wallet Desk = 0.2.6-pre.18.fix.1
|
||||||
|
commit = v0.2.6-pre.018-fix.001
|
||||||
|
```
|
||||||
|
|
||||||
|
Aucun tag prerelease.
|
||||||
|
|
||||||
|
## Correction ownership
|
||||||
|
|
||||||
|
Le canari Wallet Desk conserve exactement son objectif de sécurité, mais ne possède plus le nom physique du dotenv :
|
||||||
|
|
||||||
|
```rust
|
||||||
|
ksp_config_lib::DEFAULT_DOTENV_PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
remplace le littéral local. La règle `ksp-config-lib/tests/ownership.rs` reste donc stricte ; aucun contournement, exclusion ou `allow` n'est ajouté.
|
||||||
|
|
||||||
|
Les autres interdictions du canari (`wallets`, `logs`, `secret`, `private`) restent inchangées car elles vérifient le contenu des resources Tauri et ne redéfinissent pas un nom de document Config enregistré.
|
||||||
|
|
||||||
|
## Versions candidate
|
||||||
|
|
||||||
|
Les versions Cargo, npm et Tauri des deux Desks sont resynchronisées sur `pre.18.fix.1`. Le badge Wallet Desk suit le même signal.
|
||||||
|
|
||||||
|
Les canaris `pre.018` ne figent plus une chaîne prerelease particulière : ils comparent maintenant `package.json`, `tauri.conf.json` et le badge Wallet Desk à `env!("CARGO_PKG_VERSION")`. Un futur `pre.018-fix.NNN` ne pourra donc pas introduire une divergence de version simplement parce qu'un test contient encore l'ancien numéro.
|
||||||
|
|
||||||
|
## Parcours Tauri dev
|
||||||
|
|
||||||
|
Le parcours essayé avec :
|
||||||
|
|
||||||
|
```text
|
||||||
|
bash -lc 'cd crates/ksp-app-wallet-desk && cargo tauri dev'
|
||||||
|
```
|
||||||
|
|
||||||
|
n'est pas retenu : dans l'environnement opérateur, le login shell remplace le `PATH` et perd Cargo.
|
||||||
|
|
||||||
|
La forme canonique reste crate-local, sans login shell :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd crates/ksp-app-wallet-desk
|
||||||
|
KSP_WALLETS_DIRECTORY=var/wallet-desk-pre018-fix001 cargo tauri dev
|
||||||
|
```
|
||||||
|
|
||||||
|
ou, depuis la racine :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
(cd crates/ksp-app-wallet-desk && KSP_WALLETS_DIRECTORY=var/wallet-desk-pre018-fix001 cargo tauri dev)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Validation opérateur requise
|
||||||
|
|
||||||
|
Rejouer le gate depuis le début :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all
|
||||||
|
python3 scripts/audit_rust_workspace_rules.py
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets
|
||||||
|
cargo test -p ksp-config-lib
|
||||||
|
cargo test -p ksp-wallet-lib
|
||||||
|
cargo test -p ksp-app-config-desk
|
||||||
|
cargo test -p ksp-app-wallet-desk
|
||||||
|
cargo test --workspace
|
||||||
|
```
|
||||||
|
|
||||||
|
Puis les audits de dépendances si souhaités :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo tree -p ksp-config-lib --depth 1
|
||||||
|
cargo tree -p ksp-app-wallet-desk --depth 1
|
||||||
|
cargo tree -p ksp-app-wallet-desk -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Le parcours fonctionnel `cargo tauri dev` et les smokes live retenus sont exécutés **avant** le build.
|
||||||
|
|
||||||
|
Après tout ce qui précède, l'absolue dernière opération est :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
(cd crates/ksp-app-wallet-desk && cargo tauri build)
|
||||||
|
```
|
||||||
|
|
||||||
|
Si ce build est vert, `0.2.6-pre.018-fix.001` devient la candidate validée et la seule étape suivante est `0.2.6-rel.001` + tag stable `v0.2.6`.
|
||||||
Reference in New Issue
Block a user