252 lines
6.7 KiB
Markdown
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)
|
|
```
|