223 lines
12 KiB
Markdown
223 lines
12 KiB
Markdown
<!-- 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`, l’opé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é n’est 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 n’est ouvert et aucune donnée Store n’est chargée ;
|
||
- [X] aucun contrôle `Premier / Précédent / Suivant` Store n’est rendu ;
|
||
- [X] DataTables reste l’unique 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 d’assemblage `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 l’environnement d’assemblage, `cargo` absent ;
|
||
- [ ] `cargo check --workspace` : non exécuté dans l’environnement d’assemblage, `cargo` absent ;
|
||
- [ ] `cargo clippy --workspace --all-targets` : non exécuté dans l’environnement d’assemblage, `cargo` absent ;
|
||
- [ ] `cargo test -p ksp-app-store-desk` : à exécuter par l’opérateur ;
|
||
- [ ] `cargo tree -p ksp-app-store-desk --edges normal` : à exécuter par l’opérateur ;
|
||
- [ ] `cargo tree -p ksp-app-store-desk -e features` : à exécuter par l’opérateur.
|
||
|
||
La case `pre.002` de la section « Gates futures » reste ouverte jusqu’au 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`, l’opé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` n’est 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`. L’audit 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 d’identité et de ports 1438/1439 ;
|
||
- ajout d’un 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 d’intégration afin de supprimer les warnings observés ;
|
||
- aucune capability Store, aucun SQL, aucun changement d’architecture pagination.
|
||
|
||
La case `pre.002` reste ouverte jusqu’au gate opérateur du fix.
|