Files
khadhroony-solana-project/deltas/0.3.8/pre.006.md
2026-09-03 16:26:18 +02:00

252 lines
6.7 KiB
Markdown

<!-- file: deltas/0.3.8/pre.006.md -->
<!-- version: 1 -->
# 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)
```