v0.3.8-pre.008

This commit is contained in:
2026-09-03 19:53:25 +02:00
parent 10515d1562
commit 489d686023
16 changed files with 1050 additions and 35 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/029-V0_3_8_STORE_DESK_PLAN.md -->
<!-- version: 9 -->
<!-- version: 10 -->
# Plan v0.3.8 — Store Desk V1 RAW
@@ -592,9 +592,19 @@ Implémentation retenue : `store_query_transactions` reçoit uniquement `offset`
Les signatures et content hashes déjà visibles dans la table Transactions et son modal sont affichés sous une forme tronquée au centre, avec la valeur complète disponible au survol via tooltip natif et un bouton de copie explicite. Le mécanisme reste générique et doit être réutilisé par `pre.008` pour les pubkeys, owners, state hashes et autres identifiants longs. Les actions de copie sont tracées uniquement par identifiant logique de champ ; la valeur copiée n'est jamais journalisée. Aucun plugin clipboard Tauri ni capability supplémentaire n'est ajouté : le frontend utilise l'API Clipboard du WebView avec fallback local `document.execCommand("copy")`.
#### pre.007-fix.002 — copie explicite du preview payload
Le preview transaction reste borné à 512 bytes côté Rust mais devient copiable explicitement depuis le modal. Le bouton copie uniquement le preview hex déjà présent côté frontend ; il ne charge ni n'expose le payload complet. Les canaris Rust ajoutés en `fix.001` sont corrigés avec des raw string literals valides.
#### pre.007-fix.003 — rescope du canari de tracing copie
Le canari de sécurité ne bannit plus globalement des variables métier légitimes comme `signature` : il vérifie uniquement que les événements de copie transportent `{ fieldId }` et jamais la valeur copiée. Aucun runtime/frontend n'est modifié.
### pre.008 — RawAccountState DataTables serverSide + détail
Même intégration pour Account, pubkey/range/direction, summaries JS-safe, détail data borné, responsive/scrollX/copy UX.
Brancher `RAW Accounts` sur `RawAccountStateInspectionRead` avec le même modèle server-side que Transactions : `start/length` -> offset/limit, counts exacts, filtres Store explicites `pubkey` exacte + slot min/max + direction, `searching:false`, `ordering:false`, whitelist 25/50/100 et DataTables comme unique pager. Les rows restent data-free et exposent pubkey, slot, state hash, owner, lamports, executable, rent epoch et data length.
Le détail reçoit uniquement l'identité de row `(pubkey, slot, state_hash)`, dérive le network du Store ouvert et appelle `RawAccountStateRead`. Les bytes Account ne traversent jamais la table ; le modal reçoit au maximum 512 bytes sous forme de preview hex avec taille exacte et flag de troncature. Pubkey, owner, state hash et preview data réutilisent le helper générique troncature/tooltip/copie stabilisé en `pre.007-fix.001/002/003`. Les traces ne contiennent aucune valeur de pubkey, slot, state hash, owner ou data.
### pre.009 — extension Store observations

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/025-V0_3_8_STORE_DESK.md -->
<!-- version: 17 -->
<!-- version: 18 -->
# Validation v0.3.8 — Store Desk V1 RAW
@@ -638,3 +638,39 @@ Le gate opérateur de `pre.007-fix.002` confirme le comportement runtime attendu
- [X] aucun frontend, backend, IPC, Store, SQL ou capability Tauri n'est modifié.
Le gate Cargo de ce fix reste à rejouer après application du delta.
## 32. Clôture `pre.007-fix.003` et assemblage `pre.008` — RAW Accounts server-side
Le gate opérateur de `0.3.8-pre.7.fix.3` est entièrement vert :
```text
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
Markdown table audit: clean (314 table(s), 707 file(s))
cargo check --workspace: PASS
cargo clippy --workspace --all-targets: PASS
cargo test -p ksp-app-store-desk: PASS (21 unitaires + 4 dependency + 11 desktop contract + 9 security + 1 public API)
cargo test -p ksp-store-lib: PASS
cargo check -p ksp-store-lib --no-default-features: PASS
```
`pre.008` branche uniquement la famille RAW AccountState dans Store Desk :
- [X] `workspace.package.version = 0.3.8-pre.8` ;
- [X] nouveaux DTO app-owned `StoreAccount*Dto`, tous `pub(crate)` réexportés via `lib.rs` et consommés sous `crate::Item` ;
- [X] la requête Account IPC ne transporte que offset décimal, limit 25/50/100, pubkey exacte optionnelle, slot min/max optionnels et direction canonique ;
- [X] aucun draw/search/order/cursor/network/URI/backend physique ne traverse la requête ;
- [X] le network est dérivé du Store déjà ouvert ;
- [X] `RawAccountStateInspectionRead::inspect_raw_account_states` fournit counts exacts et summaries data-free ;
- [X] les rows exposent pubkey, slot, state hash, owner, lamports, executable, rent epoch et data length sans byte Account ;
- [X] `RAW Accounts` passe à `serverSide:true`, `searching:false`, `ordering:false`, 25/50/100 et conserve DataTables comme unique pager ;
- [X] les counts restent décimaux jusqu'au contrôle `Number.MAX_SAFE_INTEGER` côté frontend ;
- [X] `store_get_account_detail` reçoit uniquement pubkey + slot + state hash de la row et dérive le network côté Rust ;
- [X] le détail appelle `RawAccountStateRead::get_raw_account_state` et projette au maximum 512 bytes de data en preview hex ;
- [X] pubkey, owner, state hash et preview data sont copiables via le helper générique sans journaliser leur valeur ;
- [X] les filtres Account, pages, page lengths, redraws, refresh et détail sont tracés sans valeurs métier ;
- [X] aucune modification Store API, Store façade, PostgreSQL, SQL, migration, Config ou capability Tauri n'est nécessaire.
Le gate Cargo de `pre.008` reste à rejouer après application du delta.