# Delta v0.3.8-pre.1 — audit, brainstorming et planification Store Desk ## Base requise ```text v0.3.7 workspace.package.version = 0.3.7 ``` La source de code est exclusivement l'archive stable KSP v0.3.7 fournie. kbot3 a été extrait séparément et utilisé uniquement comme référence fonctionnelle/UX conformément au prompt 027. ## Résumé Cette tranche ouvre v0.3.8 sans scaffold Tauri lourd. Elle vérifie archives/règles, audite Store/API/PostgreSQL, les Desks KSP et DataTables, réaudite les fonctions Store historiques de kbot3, puis fixe capabilities/gaps/screens/tables/pagination/DTO/threat model et sizing. Décision centrale issue du brainstorming pagination : ```text RawPage cursor/keyset existant = conservé comme primitive canonique machine nouvelle pagination inspection = offset + limit + totaux + summaries backend-neutral DataTables serverSide = consommateur de la primitive inspection via Tauri invoke pagination visible = UNE SEULE, le pager DataTables ``` Cette décision évite la double pagination kbot3 sans sacrifier la pagination keyset existante. L'offset/count est confiné à une capability d'inspection réutilisable hors Tauri et à son implémentation backend privée ; aucun DTO DataTables ni SQL n'entre dans l'application ou le contrat RAW canonique. ## Recalibrage explicite du prompt 027 Le prompt supposait initialement une pagination Store cursor distincte d'un paging DataTables local, avec possibilité `paging: false`. `pre.001` avait précisément pour mission de trancher cette question avant planification. Le résultat du brainstorming remplace cette hypothèse UI par : ```text séparation des contrats oui séparation visuelle des pagers non ``` Les frontières normatives restent inchangées : Store Desk dépend uniquement de `ksp-store-lib`, aucune dépendance backend/SQL, Config reste owner des targets/secrets, V1 reste read-only et kbot3 reste uniquement fonctionnel. ## Vérification des archives - KSP v0.3.7 : SHA-256 `d57132960e4c280a67e59bea02ce08a61665890bdfb6ef16b7faf1b3c57070ae`, 1 702 entrées, ZIP propre ; - kbot3 : SHA-256 `ee47643b9f8b582ee8db97b2381ec107e45aef8c009fee44757531514615d318`, 2 501 entrées, ZIP propre ; - aucune entrée absolue, traversal, séparateur inversé ou lien symbolique ZIP ; - `workspace.package.version = 0.3.7` et `deltas/0.3.7/rel.001.md` confirmés ; - Store API/lib/PostgreSQL et Backfill Desk stable confirmés. ## Audits locaux avant modification ```text General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) KSP workspace Rust rule audit: clean Markdown table audit: clean (301 table(s), 687 file(s)) ``` `cargo` est absent de l'environnement d'assemblage. `cargo fmt/check/clippy/test` ne sont donc pas déclarés PASS localement. Le journal opérateur fourni rapporte un gate stable v0.3.7 complet et reste une preuve externe de baseline. ## Audits post-modification ```text General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) KSP workspace Rust rule audit: clean Markdown table audit: clean (283 table(s), 153 file(s)) ``` Le diff contre la base contient exactement `Cargo.toml`, le plan, la validation et le delta `pre.001`, sans suppression. Les gates Cargo restent non exécutés localement faute de binaire `cargo`. ## Architecture d'inspection retenue Contrats candidats à matérialiser à partir de `pre.003` : ```text RawInspectionPageRequest { offset, limit } RawInspectionPage { items, total_items, filtered_items } RawTransactionInspectionQuery RawAccountStateInspectionQuery RawTransactionSummary RawAccountStateSummary RawTransactionInspectionRead RawAccountStateInspectionRead ``` Les traits existants `RawTransactionRead` / `RawAccountStateRead` restent inchangés afin de ne pas casser les implémentations externes et de préserver le chemin keyset. DataTables V1 : `serverSide: true`, `ajax` fonction custom vers Tauri, `searching: false`, page length 25/50/100, ordre canonique Store seulement. `recordsTotal` / `recordsFiltered` proviennent des counts exacts Store. Aucun second pager n'est rendu. ## Décisions complémentaires - `GABARIT STORE DESK = KSP` ; aucune source de shell/package/assets/code depuis kbot3 ; - ports Vite/HMR : 1438/1439 ; - dépendances KSP V1 : Config + Logging + Store facade ; aucun Store API/PostgreSQL direct ; - npm : socle KSP + `datatables.net-bs5 ^3.0` ; Select reporté faute de fonction réelle ; - audit externe du 2026-09-03 : DataTables 3.0.3 / Select 4.0.1 ; ranges KSP conservés ; - composite prévu : Logging + Store uniquement ; - navigation initiale : Overview / RAW Transactions / RAW Accounts ; - observations intégrées aux détails puis listing ajouté après extension Store backend-neutral ; - rows principales alimentées par summaries Store, sans N+1 ni gros bytes ; - `u64` projetés comme chaînes décimales IPC ; counts vérifiés JS-safe avant DataTables ; - V1 strictement read-only. ## Fichiers ajoutés - `docs/plans/029-V0_3_8_STORE_DESK_PLAN.md` ; - `docs/validation/025-V0_3_8_STORE_DESK.md` ; - `deltas/0.3.8/pre.001.md`. ## Fichier modifié - `Cargo.toml` : header `444` vers `445`, version workspace `0.3.7` vers `0.3.8-pre.1` conformément à `VER-ID-009`. ## Non inclus - aucune crate `ksp-app-store-desk` encore créée ; - aucun Rust/TypeScript/HTML/SASS applicatif ; - aucun composite runtime créé ; - aucun SQL ou changement backend ; - aucune capability Store encore ajoutée ; - aucune reprise de code kbot3 ; - aucune modification CHANGELOG/ROADMAP ; - aucune publication stable. ## Suite prévue `pre.002` crée uniquement le scaffold KSP de `ksp-app-store-desk`. `pre.003` introduit ensuite les contrats backend-neutral d'inspection ; `pre.004` et `pre.005` implémentent respectivement les vertical slices PostgreSQL Transaction et Account avant le branchement des tables DataTables métier.