# Delta `0.3.8-pre.006` — composite Config, lifecycle Store et Overview Store Desk ## Base requise Base directe attendue : ```text 0.3.8-pre.005-fix.003 workspace.package.version = 0.3.8-pre.5.fix.3 ``` Le gate opérateur de cette base est entièrement vert. Le live proof `RawAccountState` passe sur PostgreSQL 17 et le smoke `cargo tauri dev` confirme le profil `supertrace` ainsi que le tracing frontend Store Desk. La livraison est : ```text 0.3.8-pre.006 workspace.package.version = 0.3.8-pre.6 commit = v0.3.8-pre.006 tag = aucun ``` ## Objectif Brancher pour la première fois `ksp-app-store-desk` sur le runtime Store réel, sans ouvrir encore les tables RAW en `serverSide` : ```text Config composite -> Logging supertrace -> cfg.std.store -> ksp-store-lib::Store -> runtime_snapshot + health -> Overview / Diagnostics ``` L'application reste backend-neutral : elle dépend de `ksp-store-lib`, jamais de `ksp-store-api`, `ksp-store-postgres-lib` ni d'un driver PostgreSQL. ## Composite Config Store Desk Le nouveau document : ```text config/composite.ksp-app-store-desk.json ``` contient trois profils : ```text devnet mainnet testnet ``` Chaque profil sélectionne : ```text logging -> cfg.std.logging / supertrace store -> cfg.std.store / profil homonyme ``` `ksp-config-lib` enregistre et réexporte : ```text cfg.composite.ksp-app-store-desk composite.ksp-app-store-desk.json ``` Le registre partagé passe ainsi de 14 à 15 descriptors. ## Packaging partagé `prepare_packaged_runtime()` traverse l'intégralité de `ConfigFileRegistry::defaults()`. L'ajout du quinzième descriptor impose donc que les cinq Desk apps utilisant ce mécanisme embarquent le nouveau composite : ```text ksp-app-config-desk ksp-app-wallet-desk ksp-app-solprices-desk ksp-app-backfill-desk ksp-app-store-desk ``` Leurs bundles contiennent exactement les 15 resources Config/schema du registre. Cette propagation ne modifie aucune responsabilité runtime des quatre applications existantes. ## Lifecycle Store Desk Store Desk : 1. construit `ConfigManagement` ; 2. charge le composite Store Desk par `file_id` ; 3. initialise Logging depuis le composant `logging` et exige `supertrace` en développement ; 4. résout le composant `store` via `resolve_store_config_profile()` ; 5. ouvre `ksp_store_lib::Store::open()` ; 6. conserve le Store derrière un slot async interne ; 7. expose un snapshot Overview sûr ; 8. intercepte la fermeture de la fenêtre principale ; 9. exécute une fermeture Store one-shot et bornée avant `app_handle.exit(0)`. Si Config ou Store ne peut pas être ouvert, le shell reste disponible avec un diagnostic sûr sans secret. ## Overview / Diagnostics Le DTO `StoreRuntimeStatusDto` expose uniquement : ```text profile_id backend_kind network store_open health_state migration_version_decimal pending_migration_count pool_available pool_size pool_capacity pool_waiting diagnostic { domain, code, message } ``` Sont exclus : ```text connection URI credential / password SQL PostgreSQL pool/client/handle RawPayload RawAccountState bytes transaction payload bytes ``` La commande Tauri `store_runtime_status` ne prend aucun paramètre et retourne cette projection backend-neutral. ## Frontend Overview et Diagnostics consomment le nouveau statut Store et tracent : - refresh Overview ; - refresh Diagnostics ; - IPC demandé / terminé / échoué ; - navigation et activation de vues ; - boutons/tabs/contrôles génériques. Les valeurs sensibles et les valeurs de filtres ne sont pas logguées. Les tables `RAW Transactions` et `RAW Accounts` restent volontairement : ```text serverSide: false pageLength: 25 lengthMenu: [25, 50, 100] ``` Aucun invoke d'inspection, aucun détail RAW et aucun second pager Store ne sont introduits avant `pre.007`/`pre.008`. ## Fichiers ajoutés ```text config/composite.ksp-app-store-desk.json crates/ksp-app-store-desk/src/store_runtime.rs crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-store-desk.json deltas/0.3.8/pre.006.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-app-backfill-desk/tauri.conf.json crates/ksp-app-backfill-desk/tests/desktop_contract.rs crates/ksp-app-config-desk/tauri.conf.json crates/ksp-app-config-desk/tests/desktop_contract.rs crates/ksp-app-solprices-desk/tauri.conf.json crates/ksp-app-solprices-desk/tests/desktop_contract.rs crates/ksp-app-store-desk/Cargo.toml crates/ksp-app-store-desk/frontend/main.html crates/ksp-app-store-desk/frontend/ts/main.ts crates/ksp-app-store-desk/src/app_state.rs crates/ksp-app-store-desk/src/bootstrap.rs crates/ksp-app-store-desk/src/constants.rs crates/ksp-app-store-desk/src/dto_common.rs crates/ksp-app-store-desk/src/errors.rs crates/ksp-app-store-desk/src/lib.rs crates/ksp-app-store-desk/src/tauri.rs crates/ksp-app-store-desk/tauri.conf.json crates/ksp-app-store-desk/tests/dependency_boundary.rs crates/ksp-app-store-desk/tests/desktop_contract.rs crates/ksp-app-store-desk/tests/desktop_security.rs crates/ksp-app-store-desk/unit_tests/dto_common.rs crates/ksp-app-wallet-desk/tauri.conf.json crates/ksp-app-wallet-desk/tests/desktop_contract.rs crates/ksp-app-wallet-desk/tests/release_compliance.rs crates/ksp-config-lib/README.md crates/ksp-config-lib/src/lib.rs crates/ksp-config-lib/src/registry.rs crates/ksp-config-lib/tests/public_api.rs crates/ksp-config-lib/unit_tests/registry.rs docs/plans/029-V0_3_8_STORE_DESK_PLAN.md docs/validation/025-V0_3_8_STORE_DESK.md ``` ## Fichiers supprimés ```text aucun ``` ## Validations d'assemblage Contrôles disponibles dans le sandbox d'assemblage : ```text General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) KSP workspace Rust rule audit: clean Markdown table audit: clean pre.006 structural contract audit: clean workspace.package.version: 0.3.8-pre.6 Config registry expected descriptors: 15 shared Tauri Config resources per Desk app: 15 Store Desk physical Store dependencies: 0 Store Desk RAW DataTables serverSide: false ``` Le sandbox ne dispose pas de `cargo`/`rustfmt`; aucun gate Cargo de `pre.006` n'est revendiqué localement. ## Gate requis ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-config-lib cargo test -p ksp-store-lib cargo check -p ksp-store-lib --no-default-features cargo test -p ksp-app-store-desk cargo test -p ksp-app-config-desk cargo test -p ksp-app-wallet-desk cargo test -p ksp-app-solprices-desk cargo test -p ksp-app-backfill-desk ``` Smoke runtime recommandé après gate : ```bash (cd crates/ksp-app-store-desk && cargo tauri dev) ```