Files
khadhroony-solana-project/docs/validation/025-V0_3_8_STORE_DESK.md

223 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: docs/validation/025-V0_3_8_STORE_DESK.md -->
<!-- version: 3 -->
# Validation v0.3.8 — Store Desk V1 RAW
## 1. Gate `pre.001`
- [X] archive stable KSP v0.3.7 identifiée comme base exclusive ;
- [X] `workspace.package.version = 0.3.7` avant modification ;
- [X] `deltas/0.3.7/rel.001.md` présent ;
- [X] prompt 027 et règles KSP relus ;
- [X] Store API/lib/PostgreSQL et gabarits Desk audités ;
- [X] archive kbot3 isolée et utilisée uniquement comme référence fonctionnelle/UX ;
- [X] npm/DataTables KSP inventorié ;
- [X] capability/gap/screen/table/pagination/DTO/threat maps produites ;
- [X] décision d'architecture pagination tranchée avant scaffold ;
- [X] aucun code kbot3, SQL app-owned ou scaffold Store Desk livré en `pre.001`.
## 2. Preuve des archives
| Source | SHA-256 | Résultat | Usage |
|--------------------------------------------------------|--------------------------------------------------------------------|---------------------------|----------------------------|
| `khadhroony-solana-project-v0.3.7.zip` | `d57132960e4c280a67e59bea02ce08a61665890bdfb6ef16b7faf1b3c57070ae` | 1 702 entrées, ZIP propre | source exclusive de code |
| `khadhroony-bot3_v0.5.3-pre.005-fix010-thelatest1.zip` | `ee47643b9f8b582ee8db97b2381ec107e45aef8c009fee44757531514615d318` | 2 501 entrées, ZIP propre | référence fonctionnelle/UX |
Aucune entrée absolue, traversal, séparateur inversé ou lien symbolique ZIP n'a été détectée.
## 3. Baseline locale avant modification
- [X] `python3 scripts/audit_rust_workspace_rules.py` : propre, zéro candidat d'export ;
- [X] audit Markdown : propre, 301 tables / 687 fichiers ;
- [ ] `cargo fmt --all -- --check` : non exécuté localement, `cargo` absent ;
- [ ] `cargo check --workspace` : non exécuté localement, `cargo` absent ;
- [ ] `cargo clippy --workspace --all-targets` : non exécuté localement, `cargo` absent ;
- [ ] tests ciblés Store/Config : non exécutés localement, `cargo` absent.
Le journal opérateur fourni pour v0.3.7 rapporte un gate complet. Il reste une preuve externe de baseline et n'est pas présenté comme une exécution locale de `pre.001`.
## 4. Décision pagination / inspection
- [X] `RawPageRequest` / `RawPage<T>` cursor-keyset existants sont conservés sans modification ;
- [X] le pager Store Desk ne les expose pas ;
- [X] DataTables `serverSide` exige `start`, `length`, `recordsTotal`, `recordsFiltered` ;
- [X] DataTables accepte `ajax` comme fonction custom, compatible avec un `invoke()` Tauri sans fetch ;
- [X] une primitive Store backend-neutral d'inspection offset/count est justifiée ;
- [X] deux capabilities read fine-grained Tx/Account sont préférées à la modification des traits RAW existants ;
- [X] les pages d'inspection retournent des summaries sans payload/data bytes ;
- [X] `total_items` et `filtered_items` sont exacts dans la sémantique de query ;
- [X] page length UX = 25/50/100 ; `length = -1` interdit ;
- [X] DataTables search arbitraire désactivée en V1 ;
- [X] filtres Store explicites et ordre canonique seulement ;
- [X] **un seul pager est visible : celui de DataTables** ;
- [X] aucun pager « bloc Store » ou paging local imbriqué ne subsiste.
## 5. Capability gaps et trajectoire
- [X] list/get RawTransaction cursor existe ;
- [X] list/get RawAccountState cursor existe ;
- [X] read observation par key existe pour Tx et Account ;
- [X] inspection offset/count/summary manque en v0.3.7 ;
- [X] listing observations Tx/Account manque ;
- [X] aucun gap n'est contourné par SQL dans l'app ;
- [X] inspection Tx/Account est planifiée dans Store API/lib/PostgreSQL avant l'UI métier ;
- [X] observation listing reste une extension Store dédiée ultérieure ;
- [X] les counts restent logiques/backend-neutral et n'exposent aucun diagnostic physique PostgreSQL.
## 6. Gabarit / npm
- [X] `GABARIT STORE DESK = KSP` ;
- [X] ports réservés 1438/1439 ;
- [X] shell/splash/fonts/assets dérivent uniquement des Desks KSP ;
- [X] `datatables.net-bs5 ^3.0` retenu ;
- [X] Select non retenu par défaut ;
- [X] aucune version/package kbot3 n'est utilisée ;
- [X] audit externe : DataTables 3.0.3 / Select 4.0.1 le 2026-09-03, sans upgrade opportuniste.
## 7. DTO / sécurité
- [X] tous les `u64` métier traversent IPC en texte décimal ;
- [X] counts convertis en `number` uniquement après contrôle JS-safe ;
- [X] payload transaction et account data sont detail-only ;
- [X] summaries d'inspection excluent les gros bytes ;
- [X] aucun cursor Store dans le pager DataTables ;
- [X] aucune URI/credential/backend handle/SQL n'est projeté ;
- [X] offset/limit hostiles sont rejetés avant I/O ;
- [X] `draw` DataTables sert uniquement à l'ordonnancement frontend ;
- [X] aucune persistence navigateur RAW ;
- [X] instrumentation exclut payload, URI, secrets et valeurs de filtres.
## 8. Gates futures
- [ ] `pre.002` scaffold KSP strict + DataTables skeleton ;
- [ ] `pre.003` contrats Store inspection offset/count/summaries ;
- [ ] `pre.004` PostgreSQL + façade inspection RawTransaction ;
- [ ] `pre.005` PostgreSQL + façade inspection RawAccountState ;
- [ ] `pre.006` composite Logging+Store + Overview/health ;
- [ ] `pre.007` RawTransaction DataTables serverSide + détail ;
- [ ] `pre.008` RawAccountState DataTables serverSide + détail ;
- [ ] `pre.009` observation listing/inspection Store ;
- [ ] `pre.010` observations UI + hardening UX ;
- [ ] `pre.011` security/dependency/release completeness ;
- [ ] `pre.012` gate technique final + Tauri build + smoke read-only opt-in ;
- [ ] `pre.013` réconciliation documentaire ;
- [ ] `pre.014` prompt suivant + CHANGELOG + ROADMAP ;
- [ ] `rel.001` publication stable v0.3.8.
## 9. Gate post-modification `pre.001`
- [X] `python3 scripts/audit_rust_workspace_rules.py` : General Rust clean, export completeness 0, KSP workspace Rust clean ;
- [X] `python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.8` : clean, 283 tables / 153 fichiers ;
- [X] diff contre l'archive v0.3.7 : exactement quatre fichiers ajoutés/modifiés, aucune suppression ;
- [X] archive delta testée par `unzip -t` ;
- [ ] gates Cargo : non exécutés dans l'environnement d'assemblage, `cargo` absent.
## 10. Gate opérateur de la base `pre.001`
Après application de `pre.001`, lopérateur a exécuté :
```text
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
```
Résultats fournis :
```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), 690 file(s))
cargo check --workspace: PASS
cargo clippy --workspace --all-targets: PASS
```
Cette preuve opérateur ferme le gate technique de la base `0.3.8-pre.1` avant matérialisation de `pre.002`. Aucun test crate ciblé nest inféré au-delà des commandes effectivement fournies.
## 11. `pre.002` — scaffold Store Desk matérialisé
- [X] `crates/ksp-app-store-desk` créé comme package Rust lib + bin ;
- [X] workspace avancé à `0.3.8-pre.2` ;
- [X] ports Vite/HMR stricts 1438/1439 ;
- [X] identité Tauri `KSP Store Desk` / `com.sasedev.ksp-app-store-desk` ;
- [X] splash, logo, favicon et font repris byte-exact depuis le gabarit Desk KSP ;
- [X] shell et SASS dérivés du gabarit KSP, sans source kbot3 ;
- [X] Config + Logging initialisés selon le pattern Desk KSP ;
- [X] `ksp-core-lib` admis au scaffold pour les erreurs applicatives typées, sans contourner Store ;
- [X] aucune dépendance `ksp-store-lib`, `ksp-store-api`, `ksp-store-postgres-lib`, Transport ou Job dans cette tranche ;
- [X] capabilities limitées à `core:default` + `tracing:default` ;
- [X] frontend tracing installé pour navigation, boutons, refresh et IPC ;
- [X] dépendances npm KSP stables conservées ;
- [X] `datatables.net-bs5` ajouté sans Select ;
- [X] skeletons RAW Transactions / RAW Accounts vides créés ;
- [X] aucun Store nest ouvert et aucune donnée Store nest chargée ;
- [X] aucun contrôle `Premier / Précédent / Suivant` Store nest rendu ;
- [X] DataTables reste lunique owner visuel du paging dès le scaffold ;
- [X] le mode local vide de `pre.002` ne préjuge pas du `serverSide` prévu en `pre.007`/`pre.008` ;
- [X] plan corrigé : suppression du placeholder préventif `pre.003-fix.NNN` ;
- [X] plan corrigé : screen-map alignée sur le pager DataTables unique.
## 12. Gates dassemblage `pre.002`
- [X] `python3 scripts/audit_rust_workspace_rules.py` : General Rust clean, export completeness 0, KSP workspace Rust clean ;
- [X] audit Markdown : clean, 283 tables / 155 fichiers sur le périmètre `deltas/0.3.8` ;
- [X] manifest parse : 4 JSON + 2 TOML ;
- [X] package baseline : 7 dépendances runtime obligatoires, devDependencies exactes sur 4 Desks KSP, Select absent ;
- [X] assets : 5 fichiers binaires byte-identical sur 4 Desks KSP ;
- [X] SASS partagé : 5 fichiers body-identical au gabarit KSP ;
- [X] splash : body identique au gabarit modulo identité Store Desk et metadata fichier ;
- [X] audit shell/DataTables : structure KSP + deux skeletons + owner visuel unique du pager ;
- [X] audit statique des dépendances/scopes Store/Transport/Job : aucun bypass ;
- [X] ports : 1438/1439 stricts et sans collision avec les autres Desks ;
- [X] audit frontend : pas de `fetch`, storage navigateur ni dialogue bloquant ;
- [X] audit TypeScript syntaxique par `transpileModule` 5.8.3 : 5 fichiers propres ;
- [X] audit Rust source du nouveau scaffold : aucun `panic!`, `unwrap`, `expect` ou bloc `unsafe` ;
- [X] delta scope : 47 ajouts, 3 modifications, 0 suppression ; 46 fichiers applicatifs + delta ;
- [X] archive delta finale vérifiée par `unzip -t` ;
- [ ] `cargo fmt --all` : non exécuté dans lenvironnement dassemblage, `cargo` absent ;
- [ ] `cargo check --workspace` : non exécuté dans lenvironnement dassemblage, `cargo` absent ;
- [ ] `cargo clippy --workspace --all-targets` : non exécuté dans lenvironnement dassemblage, `cargo` absent ;
- [ ] `cargo test -p ksp-app-store-desk` : à exécuter par lopérateur ;
- [ ] `cargo tree -p ksp-app-store-desk --edges normal` : à exécuter par lopérateur ;
- [ ] `cargo tree -p ksp-app-store-desk -e features` : à exécuter par lopérateur.
La case `pre.002` de la section « Gates futures » reste ouverte jusquau retour de ces gates Cargo opérateur.
## 13. Retour opérateur `pre.002` et ouverture de `pre.002-fix.001`
Après application de `pre.002`, lopérateur a exécuté le gate demandé. Les résultats fournis établissent :
```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), 692 file(s))
cargo check --workspace: PASS
cargo test -p ksp-app-store-desk: PASS (12 unit + 2 dependency boundary + 5 desktop contract + 3 desktop security + 1 public API)
cargo tree -p ksp-app-store-desk --edges normal: produit
cargo tree -p ksp-app-store-desk -e features: produit
```
`cargo clippy --workspace --all-targets` nest pas vert : deux erreurs `clippy::implicit-return` sont présentes dans les helpers `parse_json` des tests `desktop_contract.rs` et `desktop_security.rs`. Quatre crates de tests signalent aussi `missing_docs` comme warnings.
Le même retour opérateur signale une divergence de `vite.config.ts` par rapport au gabarit `ksp-app-*-desk`. Laudit comparatif confirme trois écarts non justifiés :
```text
server.hmr au lieu de server.ws
options SCSS quietDeps/silenceDeprecations/verbose absentes
otherassets/[name][hash][extname] au lieu de otherassets/[name][extname]
```
Le correctif `pre.002-fix.001` reste strictement dans le couloir scaffold de `pre.002` :
- réalignement de `vite.config.ts` sur le gabarit Desk KSP, avec seules différences didentité et de ports 1438/1439 ;
- ajout dun canari dégalité du template Vite après normalisation identité/ports/header ;
- correction explicite des deux retours Clippy dans les helpers de tests ;
- ajout des crate-level docs manquantes aux quatre crates dintégration afin de supprimer les warnings observés ;
- aucune capability Store, aucun SQL, aucun changement darchitecture pagination.
La case `pre.002` reste ouverte jusquau gate opérateur du fix.