Files
2026-09-03 19:53:25 +02:00

4.0 KiB

Delta 0.3.8-pre.008 — RAW Accounts DataTables server-side + détail

Base requise

Base directe attendue : 0.3.8-pre.007-fix.003 (workspace.package.version = 0.3.8-pre.7.fix.3).

Objet

Brancher la vue RAW Accounts de ksp-app-store-desk sur les capabilities backend-neutrales RawAccountStateInspectionRead et RawAccountStateRead, sans modifier Store API, Store façade, PostgreSQL ou les queries keyset machine.

Backend applicatif

Store Desk ajoute cinq DTO app-owned et deux commands Tauri :

store_query_accounts
store_get_account_detail

store_query_accounts reçoit uniquement :

offset decimal
limit = 25 | 50 | 100
pubkey exacte optionnelle
slot_min optionnel
slot_max optionnel
direction = ascending | descending

Le network n'est jamais fourni par le frontend : il est dérivé du ksp-store-lib::Store déjà ouvert. Le runtime construit RawInspectionPageRequest + RawAccountStateInspectionQuery puis appelle RawAccountStateInspectionRead.

La réponse app-owned contient :

rows data-free
records_total_decimal
records_filtered_decimal

Tous les u64 susceptibles de dépasser le domaine JS-safe restent encodés en texte décimal.

Table Accounts

La table passe à :

serverSide: true
searching: false
ordering: false
pageLength: 25
lengthMenu: [25, 50, 100]
ajax: fonction custom -> invoke Tauri

Le mapping visible est :

DataTables start   -> offset
DataTables length  -> limit
Store total        -> recordsTotal
Store filtered     -> recordsFiltered
Store summaries    -> data
DataTables draw    -> frontend uniquement

Les filtres Store explicites sont pubkey exacte, slot min, slot max et direction. Tout changement de filtre redessine depuis la première page. Aucun pager Store ou cursor n'est rendu.

Rows et détail

Les rows exposent uniquement pubkey, slot, state hash, owner, lamports, executable, rent epoch et data length. Aucun byte Account n'est présent dans la table.

Le bouton Détail recharge l'identité exacte (pubkey, slot, state_hash) via RawAccountStateRead. Le modal expose :

  • pubkey, slot, state hash, owner, lamports, executable et rent epoch ;
  • data length exacte ;
  • preview hex des 512 premiers bytes maximum ;
  • flag explicite de troncature ;
  • bouton de copie du preview affiché uniquement, sans charger le reste des bytes.

Pubkey, owner et state hash réutilisent le helper générique de troncature centrale + tooltip valeur complète + copie stabilisé par les fixes pre.007.

Sécurité / instrumentation

  • rejet Rust de length=-1 et de toute taille autre que 25/50/100 ;
  • offset/slots/pubkey/state hash parsés sans écho de valeur dans les erreurs ;
  • counts décimaux convertis côté TypeScript seulement après contrôle Number.MAX_SAFE_INTEGER ;
  • aucune search/order DataTables arbitraire dans le contrat IPC ;
  • aucune URI, credential, SQL, handle PostgreSQL ou byte Account dans les logs ;
  • tracing query/page/page-length/redraw/refresh/détail/copie sans valeurs de filtres ni identité ;
  • nouveaux items pub(crate) réexportés par lib.rs et consommés via crate::Item conformément aux règles KSP.

Hors scope

Aucune observation Store n'est ajoutée à l'UI ; cette extension reste réservée à pre.009/pre.010. Aucun changement de Store API, Store façade, PostgreSQL, migration, index, capability ou Config composite.

Version

delivery = 0.3.8-pre.008
workspace.package.version = 0.3.8-pre.8
commit = v0.3.8-pre.008
tag = aucun

Gate requis

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-app-store-desk
cargo test -p ksp-store-lib
cargo check -p ksp-store-lib --no-default-features

Smoke runtime recommandé :

(cd crates/ksp-app-store-desk && cargo tauri dev)