956 lines
62 KiB
Markdown
956 lines
62 KiB
Markdown
<!-- file: docs/validation/025-V0_3_8_STORE_DESK.md -->
|
||
<!-- version: 29 -->
|
||
|
||
# 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
|
||
|
||
- [X] `pre.002` scaffold KSP strict + DataTables skeleton ;
|
||
- [X] `pre.003` contrats Store inspection offset/count/summaries ;
|
||
- [X] `pre.004` PostgreSQL + façade inspection RawTransaction ;
|
||
- [X] `pre.005` PostgreSQL + façade inspection RawAccountState ;
|
||
- [X] `pre.006` composite Logging+Store + Overview/health ;
|
||
- [X] `pre.007` RawTransaction DataTables serverSide + détail ;
|
||
- [X] `pre.008` RawAccountState DataTables serverSide + détail ;
|
||
- [X] `pre.009` observation listing/inspection Store ;
|
||
- [X] `pre.010` observations UI + hardening UX ;
|
||
- [X] `pre.011` security/dependency/release completeness ;
|
||
- [X] `pre.012` gate technique final + Tauri build + smoke read-only opt-in ;
|
||
- [X] `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.
|
||
|
||
## 14. Gate opérateur `pre.002-fix.001`
|
||
|
||
Le gate complet rejoué par l’opérateur après le fix est 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), 693 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-app-store-desk: PASS
|
||
```
|
||
|
||
Détail Store Desk communiqué : 12 tests unitaires, 2 dependency-boundary, 6 desktop-contract, 3 desktop-security, 1 public-API, tous verts. Les arbres `cargo tree` normal/features ont également été produits. `pre.002` est donc fermé et `pre.003` peut s’ouvrir.
|
||
|
||
## 15. `pre.003` — contrats Store d’inspection et tracing développement
|
||
|
||
- [X] `workspace.package.version = 0.3.8-pre.3` ;
|
||
- [X] `RawInspectionPageRequest` sépare explicitement offset/limit de `RawPageRequest` cursor ;
|
||
- [X] `RawInspectionPage<T>` expose `total_items` / `filtered_items` exacts avec validation de cohérence ;
|
||
- [X] `RawTransactionInspectionQuery` conserve network/range/direction et page random-access ;
|
||
- [X] `RawAccountStateInspectionQuery` conserve network/pubkey?/range/direction et page random-access ;
|
||
- [X] `RawTransactionSummary` exclut les payload bytes et expose uniquement metadata/retention/size ;
|
||
- [X] `RawAccountStateSummary` exclut les data bytes et expose uniquement metadata/data length ;
|
||
- [X] `RawTransactionInspectionRead` et `RawAccountStateInspectionRead` sont object-safe et backend-neutral ;
|
||
- [X] `ksp-store-lib` réexporte les nouveaux contrats sans encore les implémenter sur `Store` ;
|
||
- [X] le chemin cursor/keyset existant reste inchangé ;
|
||
- [X] aucun SQL, migration ou backend physique n’est introduit ;
|
||
- [X] aucun nom/protocole DataTables n’entre dans `ksp-store-api` ;
|
||
- [X] Store Desk demande explicitement le profil Logging `supertrace` pendant le développement ;
|
||
- [X] fallback Logging Store Desk reste `Trace` ;
|
||
- [X] tracing frontend couvre boutons, navigation, tabs, changements de contrôles, Refresh et IPC ;
|
||
- [X] les futurs événements DataTables page/length/query doivent être instrumentés lors de `pre.007`/`pre.008` sans logguer les valeurs de filtres ni payloads.
|
||
|
||
## 16. Gate opérateur `pre.003` et ouverture de `pre.003-fix.001`
|
||
|
||
Le gate opérateur de `pre.003` confirme :
|
||
|
||
```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), 694 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-store-api: PASS
|
||
cargo test -p ksp-app-store-desk: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
```
|
||
|
||
`cargo test -p ksp-store-lib` échoue sur un seul canari historique :
|
||
|
||
```text
|
||
pre_009_facade_modules_and_crate_root_exports_are_exact
|
||
```
|
||
|
||
Le diagnostic est un inventaire attendu devenu obsolète après les réexports publics intentionnels de `pre.003`. La surface réelle contient bien les huit nouveaux symboles backend-neutral prévus :
|
||
|
||
```text
|
||
RawAccountStateInspectionQuery
|
||
RawAccountStateInspectionRead
|
||
RawAccountStateSummary
|
||
RawInspectionPage
|
||
RawInspectionPageRequest
|
||
RawTransactionInspectionQuery
|
||
RawTransactionInspectionRead
|
||
RawTransactionSummary
|
||
```
|
||
|
||
Le correctif `pre.003-fix.001` met uniquement à jour ce canari exact de `91` à `99` exports. Aucun contrat, comportement runtime, backend PostgreSQL, SQL, migration, pagination ou code Store Desk n'est modifié.
|
||
|
||
La case `pre.003` reste ouverte jusqu'au rejeu vert du gate opérateur sur `0.3.8-pre.3.fix.1`.
|
||
## 17. Gate opérateur `pre.003-fix.001`
|
||
|
||
Le rejeu opérateur sur `0.3.8-pre.3.fix.1` 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), 695 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-store-api: PASS
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
cargo test -p ksp-app-store-desk: PASS
|
||
```
|
||
|
||
Le canari d'inventaire façade corrigé est vert. `pre.003` est fermé et `pre.004` peut introduire uniquement le vertical slice `RawTransactionInspection` PostgreSQL + façade.
|
||
|
||
## 18. `pre.004` — inspection PostgreSQL RawTransaction + façade Store
|
||
|
||
- [X] `workspace.package.version = 0.3.8-pre.4` ;
|
||
- [X] `PostgresBackend` implémente `RawTransactionInspectionRead` sans implémenter encore `RawAccountStateInspectionRead` ;
|
||
- [X] `Store` implémente le même trait et garde le guard network avant dispatch ;
|
||
- [X] la query d'inspection PostgreSQL est une instruction unique par direction, donc counts et page partagent le même snapshot SQL ;
|
||
- [X] `total_items` compte toute la famille transaction du Store/network, y compris les tombstones `Purged` ;
|
||
- [X] `filtered_items` applique uniquement le range slot optionnel ;
|
||
- [X] sans filtre slot, le SQL réutilise `filtered_count` comme `total_count` au lieu d'un second count ;
|
||
- [X] la page random-access utilise `LIMIT/OFFSET` uniquement dans le chemin d'inspection ;
|
||
- [X] limit non représentable par PostgreSQL et offset > `i64::MAX` sont rejetés avant acquisition du pool ;
|
||
- [X] les deux queries cursor/keyset historiques restent sans `OFFSET` et excluent toujours `Purged` ;
|
||
- [X] les summaries ne sélectionnent ni `transaction_row.payload` ni `archive_row.payload` ; seules les tailles `OCTET_LENGTH` sont projetées ;
|
||
- [X] les marqueurs hot/archive payload sont projetés comme booléens pour rejeter les formes physiques incohérentes sans transférer les bytes ;
|
||
- [X] les summaries `Full`, `Archived` et `Purged` sont décodés avec les invariants physiques correspondants ;
|
||
- [X] une page vide obtenue par offset profond conserve les counts exacts ;
|
||
- [X] le live proof PostgreSQL opt-in couvre counts filtrés, ordre asc/desc, offset et page vide ;
|
||
- [X] inventaires exacts Store/PostgreSQL passent de 10 à 11 implementations RAW et restent symétriques ;
|
||
- [X] aucune migration, table, index, capability Account inspection, UI Desk ou protocole DataTables n'est ajouté dans cette tranche.
|
||
|
||
## 19. Gate opérateur `pre.004` et ouverture de `pre.004-fix.001`
|
||
|
||
Le gate opérateur de `pre.004` confirme que les audits Rust/Markdown, `cargo check --workspace`, `ksp-store-lib`, `ksp-store-api` et les 66 tests unitaires PostgreSQL sont verts. Deux défauts de tests empêchent toutefois la fermeture de la tranche :
|
||
|
||
```text
|
||
cargo clippy --workspace --all-targets: FAIL
|
||
4 x clippy::implicit-return dans hardening_completeness.rs
|
||
|
||
cargo test -p ksp-store-postgres-lib: FAIL
|
||
pre_006_raw_pagination_is_keyset_cursor_bound_and_policy_free
|
||
canari historique interdisant OFFSET sur tout raw_transaction.rs
|
||
```
|
||
|
||
Le second échec ne remet pas en cause le contrat `pre.004` : l'`OFFSET` est volontairement autorisé uniquement dans les statements d'inspection random-access, tandis que les statements `LIST_TRANSACTIONS_*` cursor/keyset doivent rester OFFSET-free. `pre.004-fix.001` rescope donc le canari historique sur les statements keyset eux-mêmes au lieu de l'appliquer au fichier physique complet.
|
||
|
||
Le live proof lancé ensuite n'a pas fourni de preuve PostgreSQL exploitable : le journal ne contient pas la ligne `server major ...`, émise seulement après lecture de l'URI et connexion initiale. L'exécution observée est compatible avec une attente sur `stdin().read_line()`. Le fix rend cette attente explicite dans le message du test. Pour une saisie locale masquée :
|
||
|
||
```bash
|
||
read -rsp 'Dedicated PostgreSQL URI: ' KSP_LIVE_PG_URI
|
||
printf '\n'
|
||
printf '%s\n' "$KSP_LIVE_PG_URI" | cargo test -p ksp-store-postgres-lib --test postgres_raw_transaction_live -- --ignored --nocapture
|
||
unset KSP_LIVE_PG_URI
|
||
```
|
||
|
||
Aucun SQL, contrat Store, runtime PostgreSQL ou comportement d'inspection de production n'est modifié par ce fix.
|
||
## 20. Gate opérateur `pre.004-fix.001` et live proof PostgreSQL
|
||
|
||
Le rejeu opérateur sur `0.3.8-pre.4.fix.1` 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), 697 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-store-postgres-lib: PASS
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
cargo test -p ksp-store-api: PASS
|
||
```
|
||
|
||
Le live proof `postgres_raw_transaction_live` a ensuite été exécuté sur une base PostgreSQL dédiée vide. Il atteint réellement PostgreSQL 17 et passe :
|
||
|
||
```text
|
||
KSP Store RawTransaction live proof: server major 17
|
||
test pre_009_real_postgres_raw_transaction_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
|
||
```
|
||
|
||
`pre.004` est donc fermé sans réserve et `pre.005` peut ouvrir uniquement le vertical slice `RawAccountStateInspectionRead`.
|
||
|
||
## 21. `pre.005` — inspection PostgreSQL RawAccountState + façade Store
|
||
|
||
- [X] `workspace.package.version = 0.3.8-pre.5` ;
|
||
- [X] `PostgresBackend` implémente `RawAccountStateInspectionRead` ;
|
||
- [X] `Store` implémente le même trait avec guard network avant dispatch ;
|
||
- [X] les inventaires RAW Store/PostgreSQL passent de 11 à 12 et restent exactement symétriques ;
|
||
- [X] chaque direction d'inspection Account utilise une seule instruction SQL regroupant `filtered_count`, `total_count` conditionnel et page LATERAL ;
|
||
- [X] `filtered_items` applique le filtre exact `pubkey` optionnel et le range slot inclusif ;
|
||
- [X] `total_items` compte toute la famille `ksp_raw_account_states` et réutilise `filtered_count` lorsqu'aucun filtre n'est actif ;
|
||
- [X] l'ordre inspection est canonique `(slot, pubkey, state_hash)` en ascendant ou descendant ;
|
||
- [X] la page random-access utilise `LIMIT/OFFSET` uniquement dans le chemin inspection ;
|
||
- [X] limit/offset non représentables par PostgreSQL sont rejetés avant acquisition du pool ;
|
||
- [X] les quatre statements cursor/keyset Account historiques restent sans `OFFSET` ;
|
||
- [X] le SQL d'inspection ne sélectionne jamais `account_row.data` et projette seulement `OCTET_LENGTH(account_row.data)` ;
|
||
- [X] `RawAccountStateSummary` est reconstruit avec reference, lamports, owner, executable, rent epoch et data length uniquement ;
|
||
- [X] longueurs, widths et décimaux hostiles sont rejetés sans écho de valeur ;
|
||
- [X] une page vide obtenue par offset profond conserve les counts exacts ;
|
||
- [X] le live proof Account opt-in couvre filtre pubkey, counts, ordre asc/desc, offset, data length et page vide profonde ;
|
||
- [X] aucune migration, table, index, capability destructive Account, UI Desk ou protocole DataTables n'est ajouté.
|
||
|
||
## 22. Gate opérateur `pre.005` et ouverture de `pre.005-fix.001`
|
||
|
||
Le gate opérateur de `pre.005` confirme que les audits Rust/Markdown, `ksp-store-lib`, `ksp-store-api` et le live proof PostgreSQL Account sont verts, mais la tranche ne peut pas être fermée : `cargo fmt --all`, `cargo clippy --workspace --all-targets` et `cargo test -p ksp-store-postgres-lib` échouent tous sur une erreur de syntaxe dans le fichier de tests unitaires `unit_tests/raw_account.rs`.
|
||
|
||
La fixture `inspection_row(data_length_bytes)` a perdu sa signature de fonction lors de l'assemblage du delta ; seul son `return super::RawAccountInspectionDbRow { ... };` est resté, ce qui laisse une accolade fermante orpheline. Le live proof d'intégration peut néanmoins compiler et passer car ce fichier n'est inclus que sous `cfg(test)` dans les tests unitaires de la bibliothèque.
|
||
|
||
`pre.005-fix.001` restaure uniquement la signature de cette fixture. Aucun SQL, runtime PostgreSQL, contrat Store, capability ou comportement d'inspection de production n'est modifié. Le live proof Account exécuté sur PostgreSQL 17 reste une preuve valide du chemin runtime :
|
||
|
||
```text
|
||
KSP Store RawAccountState live proof: server major 17
|
||
test pre_009_real_postgres_raw_account_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
|
||
```
|
||
|
||
## 23. Gate opérateur `pre.005-fix.001` et ouverture de `pre.005-fix.002`
|
||
|
||
Le rejeu opérateur sur `0.3.8-pre.5.fix.1` confirme que la restauration de la fixture Account inspection est correcte : `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, les 69 tests unitaires PostgreSQL, `ksp-store-lib`, le mode `--no-default-features` et `ksp-store-api` compilent ou passent jusqu'au test d'intégration `dependency_boundary`.
|
||
|
||
Deux canaris historiques Account restent cependant trop larges :
|
||
|
||
```text
|
||
pre_005_raw_account_acquisition_is_atomic_idempotent_and_keeps_trait_impls_out_of_sql_module: FAIL
|
||
pre_006_raw_account_additional_observation_is_reference_guarded_cancellation_safe_and_keeps_destructive_scope_closed: FAIL
|
||
reason: raw_account.rs contient désormais OFFSET dans les deux statements d'inspection random-access
|
||
```
|
||
|
||
Ces canaris interdisaient `OFFSET` sur tout `raw_account.rs`, alors que depuis `pre.005` le fichier contient légitimement deux statements `INSPECT_ACCOUNT_STATES_*` avec `LIMIT/OFFSET`. Cette interdiction globale est obsolète. `pre.005-fix.002` retire uniquement `OFFSET` de leurs listes de scope interdit ; les garanties de pagination restent couvertes par :
|
||
|
||
- `pre_007_raw_account_pagination_is_keyset_cursor_bound_and_policy_free`, qui exige que les quatre statements `LIST_ACCOUNT_STATES_*` et le cursor restent sans `OFFSET` ;
|
||
- `v0_3_8_pre_005_raw_account_keyset_sql_remains_offset_free_while_inspection_is_random_access`, qui exige exactement deux occurrences d'`OFFSET`, uniquement dans les deux statements d'inspection.
|
||
|
||
Les interdictions destructives `UPDATE`, `DELETE FROM` et `ON CONFLICT DO UPDATE` restent inchangées dans les deux canaris historiques. Aucun SQL, runtime, contrat public, migration, capability ou comportement Store n'est modifié.
|
||
|
||
Le live proof Account est de nouveau vert sur PostgreSQL 17 :
|
||
|
||
```text
|
||
KSP Store RawAccountState live proof: server major 17
|
||
test pre_009_real_postgres_raw_account_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
|
||
```
|
||
|
||
## 24. Gate opérateur `pre.005-fix.002` et ouverture de `pre.005-fix.003`
|
||
|
||
Le rejeu opérateur sur `0.3.8-pre.5.fix.2` confirme que `cargo fmt --all`, les audits Rust/Markdown, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, les 69 tests unitaires PostgreSQL, `ksp-store-lib`, le mode `--no-default-features` et `ksp-store-api` sont verts. Les deux canaris `dependency_boundary` corrigés par `pre.005-fix.002` passent également.
|
||
|
||
Il reste un unique canari historique trop large dans `hardening_completeness.rs` :
|
||
|
||
```text
|
||
pre_010_raw_account_private_sql_is_non_destructive_keyset_and_family_local: FAIL
|
||
reason: raw_account.rs contient désormais OFFSET dans les deux statements d'inspection random-access
|
||
```
|
||
|
||
Ce canari `pre.010` interdit encore `OFFSET` sur l'intégralité de `raw_account.rs`, alors que ce fichier contient légitimement depuis `pre.005` deux statements `INSPECT_ACCOUNT_STATES_*` avec `LIMIT/OFFSET`. `pre.005-fix.003` retire uniquement cette interdiction globale devenue obsolète.
|
||
|
||
Les garanties pertinentes restent strictes et redondantes :
|
||
|
||
- `pre_007_raw_account_pagination_is_keyset_cursor_bound_and_policy_free` exige que les quatre statements `LIST_ACCOUNT_STATES_*` restent sans `OFFSET` ;
|
||
- `v0_3_8_pre_005_raw_account_keyset_sql_remains_offset_free_while_inspection_is_random_access` exige les quatre statements keyset sans `OFFSET`, les deux statements d'inspection random-access avec `LIMIT/OFFSET`, et exactement deux occurrences d'`OFFSET` dans `raw_account.rs` ;
|
||
- le canari `pre_010` conserve toutes ses interdictions destructives et de policy (`SELECT *`, `ON CONFLICT DO UPDATE`, `UPDATE`, `DELETE`, `TRUNCATE`, `batch_size`, `priority`).
|
||
|
||
Aucun SQL, runtime PostgreSQL, contrat public, migration, capability, modèle ou comportement Store n'est modifié.
|
||
|
||
## 25. Clôture opérateur `pre.005-fix.003`
|
||
|
||
Le rejeu opérateur sur `0.3.8-pre.5.fix.3` ferme `pre.005` sans réserve :
|
||
|
||
```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), 701 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-store-postgres-lib: PASS (69 unitaires + integrations/doc-tests)
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
cargo test -p ksp-store-api: PASS
|
||
```
|
||
|
||
Le live proof `postgres_raw_account_live` est également vert sur PostgreSQL 17 :
|
||
|
||
```text
|
||
KSP Store RawAccountState live proof: server major 17
|
||
test pre_009_real_postgres_raw_account_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
|
||
```
|
||
|
||
Le smoke `cargo tauri dev` de Store Desk démarre aussi correctement ; le journal confirme le profil Logging `supertrace`, le cycle splash/main et les événements frontend navigation/view/IPC. `pre.006` peut donc ouvrir.
|
||
|
||
## 26. `pre.006` — composite Config + lifecycle Store + Overview
|
||
|
||
- [X] `workspace.package.version = 0.3.8-pre.6` ;
|
||
- [X] `config/composite.ksp-app-store-desk.json` ajouté avec profils `devnet`, `mainnet`, `testnet` ;
|
||
- [X] chaque profil composite sélectionne Logging `supertrace` et le profil `cfg.std.store` homonyme ;
|
||
- [X] `cfg.composite.ksp-app-store-desk` et son filename sont enregistrés et réexportés par `ksp-config-lib` ;
|
||
- [X] le registre Config passe de 14 à 15 descriptors et conserve son ordre/inventaire exact ;
|
||
- [X] une fixture Store Desk adaptée au corpus Config unitaire réduit est ajoutée ;
|
||
- [X] les cinq Desk apps utilisant `prepare_packaged_runtime()` embarquent les 15 resources Config/schema ;
|
||
- [X] leurs canaris de packaging sont réconciliés de 14 à 15 sans changement de runtime métier ;
|
||
- [X] Store Desk dépend désormais de `ksp-store-lib` mais jamais directement de `ksp-store-api` ou `ksp-store-postgres-lib` ;
|
||
- [X] le bootstrap charge le composite Store Desk par son `file_id`, valide les composants Logging/Store et garde `Trace` comme fallback Logging sûr ;
|
||
- [X] l'ouverture Store passe exclusivement par `ksp_store_lib::Store::open` après résolution `cfg.std.store` ;
|
||
- [X] l'Overview/Diagnostics utilise `runtime_snapshot()` et `health()` via `StoreRuntimeStatusDto` ;
|
||
- [X] le DTO expose seulement profile/backend/network, health, migration et compteurs de pool ; aucune URI, credential, SQL, handle physique ou byte RAW ;
|
||
- [X] la commande Tauri `store_runtime_status` est backend-neutral et ne prend aucun paramètre sensible ;
|
||
- [X] la fermeture main-window est interceptée une fois, appelle `Store::close()` via la façade et sort ensuite de Tauri ;
|
||
- [X] les tables RAW restent `serverSide:false`, sans invoke d'inspection ni second pager ;
|
||
- [X] les clics Refresh, navigation/views, tabs/controls et IPC restent tracés sans valeurs de filtres ni secrets ;
|
||
- [X] aucune migration, query métier d'inspection, détail RAW ou changement de capability Tauri n'est ajouté en `pre.006`.
|
||
|
||
Le gate Cargo opérateur de `pre.006` reste à exécuter après application du delta.
|
||
|
||
## 27. Gate opérateur `pre.006` et ouverture de `pre.006-fix.001`
|
||
|
||
Le gate opérateur de `0.3.8-pre.6` est fonctionnellement vert : audits Rust/Markdown, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, `ksp-config-lib` (128 unitaires + intégrations), `ksp-store-lib`, `--no-default-features`, Store Desk et les quatre autres Desk apps passent. Le smoke `cargo tauri dev` confirme également le composite `mainnet`, Logging `supertrace`, l'ouverture/health Store, les traces frontend et la fermeture Store bornée.
|
||
|
||
Il subsiste toutefois un warning Rust récurrent :
|
||
|
||
```text
|
||
warning: unused import: `self::store_runtime::StoreRuntime`
|
||
--> crates/ksp-app-store-desk/src/lib.rs
|
||
```
|
||
|
||
Le réexport `StoreRuntime` est requis par la règle de façade crate-root et ne doit pas être supprimé. Le défaut est inverse : le module propriétaire utilise encore le nom nu `StoreRuntime` au lieu de `crate::StoreRuntime`. La revue de conformité étendue de Store Desk relève le même motif pour plusieurs items partagés déjà réexportés : `CommandErrorDto`, `FrontendLogPayloadDto`, `SplashSettings`, `SplashOrderDto`, `StoreStartup` et `StoreRuntime`.
|
||
|
||
`pre.006-fix.001` applique donc `RUST-IMPORT-009`, `RUST-IMPORT-012` et `RUST-API-004` dans la crate Store Desk :
|
||
|
||
- [X] tous les items `pub`/`pub(crate)` partagés concernés restent réexportés via `lib.rs` ;
|
||
- [X] leurs usages dans leur module propriétaire passent par `crate::Item` ;
|
||
- [X] `StoreRuntime` et `StoreStartup` utilisent `crate::StoreRuntime` / `crate::StoreStartup` jusque dans les `impl`, signatures et constructions ;
|
||
- [X] les champs DTO partagés utilisent `crate::CommandErrorDto` ;
|
||
- [X] le bridge frontend prend `crate::FrontendLogPayloadDto` ;
|
||
- [X] les `impl` splash utilisent `crate::SplashSettings` et `crate::SplashOrderDto` ;
|
||
- [X] `WINDOW_LABEL_MAIN` et `WINDOW_LABEL_SPLASH`, utilisés exclusivement dans leur module, redeviennent privés au lieu d'être `pub(crate)` sans façade crate-root ;
|
||
- [X] un canari `dependency_boundary` verrouille ces chemins et la distinction item partagé / helper local privé.
|
||
|
||
Aucun composite Config, Store runtime, query, SQL, DTO wire, commande Tauri, frontend, DataTables ou comportement de fermeture n'est modifié.
|
||
## 28. Clôture opérateur `pre.006-fix.001` et `pre.007` — RAW Transactions server-side
|
||
|
||
Le gate opérateur de `0.3.8-pre.6.fix.1` est entièrement vert et ne contient plus le warning de réexport `StoreRuntime` :
|
||
|
||
```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), 703 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-app-store-desk: PASS (14 unitaires + 3 dependency + 8 desktop contract + 5 security + 1 public API)
|
||
cargo test -p ksp-config-lib: PASS (128 unitaires + intégrations)
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
```
|
||
|
||
`pre.007` branche uniquement la famille RAW Transactions :
|
||
|
||
- [X] `workspace.package.version = 0.3.8-pre.7` ;
|
||
- [X] `StoreTransactionQueryRequestDto` ne transporte que offset décimal, limit 25/50/100, slot min/max optionnels et direction canonique ;
|
||
- [X] aucun `draw`, colonnes DataTables, search arbitraire, order arbitraire, cursor Store, network ou donnée physique ne traverse le request IPC ;
|
||
- [X] `StoreRuntime` dérive le network du Store ouvert et appelle `RawTransactionInspectionRead` via `ksp-store-lib` uniquement ;
|
||
- [X] `records_total_decimal` et `records_filtered_decimal` restent exacts jusqu'au contrôle JS-safe côté frontend ;
|
||
- [X] les rows DataTables contiennent signature/slot/block time/format/version/taille/hash/rétention, sans payload bytes ;
|
||
- [X] Transactions utilise `serverSide:true`, `searching:false`, `ordering:false`, page length 25/50/100 et `ajax` Tauri custom ;
|
||
- [X] DataTables reste l'unique pager visible ; aucun cursor/pager Store parallèle n'est rendu ;
|
||
- [X] les filtres explicites slot min/max + direction déclenchent un redraw depuis la première page ;
|
||
- [X] `length=-1`, taille hors whitelist, offset non décimal, range inversée et direction inconnue sont rejetés avant la query Store ;
|
||
- [X] les counts hors `Number.MAX_SAFE_INTEGER` produisent une erreur UX au lieu d'un arrondi silencieux ;
|
||
- [X] `store_get_transaction_detail` reçoit uniquement la signature encodée de la row et ne reçoit jamais le network du frontend ;
|
||
- [X] le détail `Full`/`Archived` charge une seule transaction et expose au maximum 512 bytes en preview hex ;
|
||
- [X] le détail `Purged` utilise `RawTransactionTombstone`, sans inventer block time ou payload ;
|
||
- [X] les événements query/page/page-length/redraw/refresh/détail sont tracés sans valeurs de slot, signature ou payload ;
|
||
- [X] les nouveaux items `pub(crate)` sont réexportés via `lib.rs` et consommés sous `crate::Item` ;
|
||
- [X] RAW Accounts reste volontairement `serverSide:false` jusqu'à `pre.008` ;
|
||
- [X] aucune modification `ksp-store-api`, `ksp-store-lib`, `ksp-store-postgres-lib`, migration ou capability n'est introduite par cette tranche applicative.
|
||
|
||
Le gate opérateur de `pre.007` est ensuite 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), 704 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-app-store-desk: PASS (21 unitaires + 4 dependency + 9 desktop contract + 7 security + 1 public API)
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
```
|
||
|
||
Le smoke `cargo tauri dev` confirme le chemin réel `serverSide` Transactions : chargement initial de 25 rows, navigation de page, passage à 100 rows/page, IPC `store_query_transactions`, maintien de RAW Accounts hors `serverSide` et shutdown Store borné.
|
||
|
||
## 29. `pre.007-fix.001` — troncature, tooltip et copie des identifiants longs
|
||
|
||
À la demande opérateur, la présentation des chaînes longues est harmonisée avant `pre.008` :
|
||
|
||
- [X] signature de transaction tronquée au centre dans la table ;
|
||
- [X] content hash tronqué au centre dans la table ;
|
||
- [X] signature et content hash du modal utilisent la même présentation ;
|
||
- [X] la valeur complète reste accessible au survol par attribut `title` ;
|
||
- [X] chaque valeur dispose d'un bouton Copier explicite ;
|
||
- [X] Clipboard API utilisée en premier, avec fallback `document.execCommand("copy")` sans plugin Tauri supplémentaire ;
|
||
- [X] feedback visuel temporaire après copie ;
|
||
- [X] tracing `requested/completed/failed` ne transporte que le `fieldId`, jamais la signature, le hash ou la valeur copiée ;
|
||
- [X] le helper reste générique pour réutilisation directe en `pre.008` sur pubkey/owner/state hash ;
|
||
- [X] aucun changement backend, IPC, Store, SQL, Config ou capability Tauri.
|
||
|
||
Le gate Cargo de ce fix reste à rejouer après application du delta.
|
||
|
||
## 30. `pre.007-fix.002` — correction des canaris copie + copie du preview payload
|
||
|
||
Le gate opérateur de `pre.007-fix.001` confirme que le runtime/frontend démarre et que les boutons de copie sont présents, mais les nouveaux canaris Rust ne compilent pas : plusieurs chaînes de test contiennent des guillemets TypeScript non échappés. Le défaut est strictement dans `desktop_contract.rs` / `desktop_security.rs`; le binaire Store Desk reste compilable et le smoke Tauri atteint le détail transaction.
|
||
|
||
Le même smoke montre également le badge `Preview tronquée à 512 bytes`. Cette borne reste intentionnelle : le détail IPC ne transporte jamais plus de 512 bytes de RAW payload. `pre.007-fix.002` ajoute toutefois une copie explicite du **preview hex déjà chargé**, sans lever cette borne :
|
||
|
||
- [X] les canaris `pre.007-fix.001` utilisent des raw string literals Rust valides pour inspecter le TypeScript ;
|
||
- [X] le preview payload reste borné à 512 bytes côté Rust ;
|
||
- [X] un bouton `Copier` est affiché uniquement lorsqu'un preview existe ;
|
||
- [X] la copie porte exactement sur le preview hex affiché, jamais sur un payload complet non chargé ;
|
||
- [X] le bouton est libellé `Copier le preview hex affiché` afin de ne pas induire l'utilisateur en erreur lorsque le badge de troncature est visible ;
|
||
- [X] le helper de copie restaure désormais le titre initial du bouton après le feedback `Copié`, ce qui conserve le libellé spécifique du preview ;
|
||
- [X] le tracing utilise uniquement `fieldId = transaction-payload-preview` et ne journalise jamais le contenu hex ;
|
||
- [X] aucun changement Store API, Store façade, PostgreSQL, SQL, DTO IPC ou capability Tauri n'est introduit.
|
||
|
||
Le gate Cargo de ce fix reste à rejouer après application du delta.
|
||
|
||
## 31. `pre.007-fix.003` — rescope du canari de sécurité de copie
|
||
|
||
Le gate opérateur de `pre.007-fix.002` confirme le comportement runtime attendu : le preview payload tronqué à 512 bytes est copiable et le tracing réel ne transporte que `fieldId = transaction-payload-preview`. Un seul test de sécurité reste rouge parce que son canari interdit globalement la séquence TypeScript `{ signature }`, qui existe légitimement dans la construction de la requête de détail hors tracing.
|
||
|
||
`pre.007-fix.003` rescope ce canari sur les trois appels de tracing du helper de copie :
|
||
|
||
- [X] `requested`, `failed` et `completed` doivent chacun transporter exactement `{ fieldId }` ;
|
||
- [X] les variantes transportant `value` avec ou sans `fieldId` restent explicitement interdites ;
|
||
- [X] aucune interdiction globale de variable métier comme `signature` n'est appliquée hors contexte de tracing ;
|
||
- [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.
|
||
|
||
## 33. `pre.008-fix.001` — correction du canari pubkey Account
|
||
|
||
Le gate opérateur de `0.3.8-pre.8` confirme que les audits KSP, `cargo check --workspace`, Store lib et `--no-default-features` sont verts. L'unique blocage est la compilation du canari `desktop_contract.rs` : le motif TypeScript `pubkey: pubkey === "" ? null : pubkey` a été placé dans un string literal Rust ordinaire sans échapper les guillemets internes.
|
||
|
||
`pre.008-fix.001` corrige uniquement ce canari :
|
||
|
||
- [X] le motif TypeScript est exprimé par un raw string literal Rust valide ;
|
||
- [X] le contrat vérifié reste exactement `pubkey: pubkey === "" ? null : pubkey` ;
|
||
- [X] aucun runtime Account, frontend, IPC, DTO, Store, PostgreSQL, SQL, Config ou capability Tauri n'est modifié ;
|
||
- [X] la version workspace devient `0.3.8-pre.8.fix.1` parce qu'un fichier de test Rust est modifié.
|
||
|
||
Le gate Cargo du fix reste à rejouer après application du delta.
|
||
## 34. Clôture `pre.008-fix.001` et assemblage `pre.009` — inspection Store observations
|
||
|
||
Le gate opérateur de `0.3.8-pre.8.fix.1` 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), 709 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-app-store-desk: PASS (28 unitaires + 5 dependency + 13 desktop contract + 12 security + 1 public API)
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
```
|
||
|
||
`pre.009` étend uniquement les contrats et implémentations Store d'inspection des observations RAW :
|
||
|
||
- [X] `workspace.package.version = 0.3.8-pre.9` ;
|
||
- [X] `RawTransactionObservationInspectionQuery` et `RawAccountObservationInspectionQuery` réutilisent `RawInspectionPageRequest`, direction canonique et network obligatoire ;
|
||
- [X] le filtre entité est optionnel mais, lorsqu'il est présent, doit porter exactement le même network que la query ;
|
||
- [X] `RawTransactionObservationSummary` expose uniquement observation key, référence transaction et provenance sûre ;
|
||
- [X] `RawAccountObservationSummary` expose uniquement observation key, référence account, provenance sûre et metadata Yellowstone optionnelles déjà contractuelles ;
|
||
- [X] aucun payload transaction ni byte Account n'appartient aux summaries ;
|
||
- [X] `RawTransactionObservationInspectionRead` et `RawAccountObservationInspectionRead` portent l'inventaire API à 14 capabilities RAW ;
|
||
- [X] `ksp-store-lib::Store` dispatch les deux nouvelles capabilities après validation network pré-I/O ;
|
||
- [X] `ksp-store-postgres-lib` implémente les deux capabilities sans exposer de SQL ou type physique ;
|
||
- [X] PostgreSQL utilise deux statements privés par famille, ASC/DESC, avec count exact, `LEFT JOIN LATERAL`, `LIMIT/OFFSET` et ordre déterministe `(received_at_unix_millis, observation_key)` ;
|
||
- [X] les statements Observation Transaction ne sélectionnent jamais les payload/archive bytes ;
|
||
- [X] les statements Observation Account ne sélectionnent jamais les bytes `data` ;
|
||
- [X] les queries keyset/cursor historiques et les reads par observation key restent inchangés ;
|
||
- [X] les anciens canaris OFFSET restent scopés par statements nommés afin de ne pas confondre inspection random-access et navigation keyset ;
|
||
- [X] les inventaires Store/PostgreSQL sont symétriques à 14 capabilities ;
|
||
- [X] les exports Store API et Store façade sont exacts, respectivement 74 et 105 entrées dans leurs canaris d'inventaire ;
|
||
- [X] les items visibles restent réexportés jusqu'aux `lib.rs` et consommés via `crate::Item` ;
|
||
- [X] aucune migration, index, Config, Store Desk UI ou capability Tauri n'est modifié dans cette tranche.
|
||
|
||
Contrôles statiques disponibles dans l'environnement d'assemblage :
|
||
|
||
```text
|
||
General Rust rule audit: clean
|
||
Rust export completeness audit: 0 candidate(s)
|
||
KSP workspace Rust rule audit: clean
|
||
API crate-root export inventory: 74 / 74 exact
|
||
Store crate-root re-export inventory: 105 / 105 exact
|
||
RAW capability inventory: API 14 / Store 14 / PostgreSQL 14
|
||
Store operation-network validation inventory: 18
|
||
```
|
||
|
||
Le gate Cargo de `pre.009` reste à rejouer après application du delta.
|
||
|
||
## 35. `pre.009-fix.001` — Clippy et canari SQL Observation Transaction
|
||
|
||
Le gate opérateur de `0.3.8-pre.9` confirme que les audits KSP, `cargo check --workspace`, Store API, Store lib et les inventaires 14/14 sont fonctionnels. Deux défauts de qualité restent à corriger avant clôture de `pre.009` :
|
||
|
||
- [X] quatre warnings `clippy::collapsible_if` dans les nouveaux chemins Observation (`ksp-store-api`, `raw_transaction.rs`, `raw_account.rs`) sont remplacés par des let-chains Rust 2024 sans modifier le contrat ;
|
||
- [X] le canari SQL Transaction Observation ne bannit plus le mot générique `payload`, car les metadata sûres `source_payload_hash` et `source_payload_size_bytes` en font légitimement usage ;
|
||
- [X] le canari interdit désormais les sources/colonnes RAW physiques précises : table transaction, table archive payload, `page.payload`, `SELECT payload` et `SELECT *` ;
|
||
- [X] aucune projection Observation ne gagne de byte payload/data et aucun SQL de production n'est élargi ;
|
||
- [X] la version workspace devient `0.3.8-pre.9.fix.1` car du code Rust de production et un test Rust sont modifiés.
|
||
|
||
Le gate Cargo du fix reste à rejouer après application du delta.
|
||
|
||
## 34. `pre.010` — observations UI + hardening UX
|
||
|
||
Base directe : `0.3.8-pre.009-fix.001`, gate opérateur entièrement vert (`cargo check --workspace`, Clippy sans warning, Store API, PostgreSQL, Store façade et `--no-default-features`).
|
||
|
||
La tranche `pre.010` ajoute uniquement l'intégration application/UI des capabilities Observation existantes : deux DTO server-side backend-neutres, deux commands Tauri, deux chemins `StoreStartup`/`StoreRuntime` et deux DataTables intégrées aux détails Transaction/Account. Les observations sont filtrées par l'identité exacte déjà sélectionnée, en direction descending fixe. Aucun schéma, migration, SQL backend, Store API ou Store façade n'est modifié.
|
||
|
||
Les DTO Observation exposent seulement provenance sûre et metadata optionnelles Account ; aucun byte RAW/source n'est présent. Tous les nouveaux items `pub(crate)` sont réexportés via `lib.rs` et consommés avec `crate::Item`. Les chaînes longues utilisent le helper copyable existant et le tracing ne transporte ni signature, pubkey, state hash, observation key, source hash ni autre valeur copiée.
|
||
|
||
Hardening ajouté : validation Rust commune `inspection_page_from_request`, whitelist 25/50/100, offset `u64`, draw/start/length frontend contrôlés, counts décimaux refusés au-delà du domaine JS sûr, réponses Observation stale ignorées lors d'un changement d'entité, erreurs de query séparées dans chaque modal et ajustement DataTables au `shown.bs.modal`.
|
||
|
||
Validation d'assemblage assistant : audits Rust/exports/Markdown, syntaxe TypeScript/HTML, inventaire DTO/commands/Store paths et reconstruction delta. Les gates Cargo restent à exécuter par l'opérateur.
|
||
|
||
## 36. `pre.010-fix.001` — canaris Tauri Observation compilables
|
||
|
||
Le gate opérateur de `0.3.8-pre.10` confirme que les audits KSP, `cargo check --workspace`, Store façade et `--no-default-features` sont verts, et que le smoke Tauri démarre/ferme correctement le runtime Store. L'unique blocage du gate compilé est `desktop_security.rs` : deux assertions contenant des motifs Rust/TypeScript imbriqués utilisent des string literals Rust ordinaires avec des guillemets internes non échappés.
|
||
|
||
`pre.010-fix.001` corrige strictement ces canaris :
|
||
|
||
- [X] les motifs `project_command_error("store_query_transaction_observations")` et `project_command_error("store_query_account_observations")` sont exprimés par des raw string literals Rust valides ;
|
||
- [X] les motifs testés restent strictement identiques ;
|
||
- [X] aucun runtime, frontend, DTO, IPC, Store API/façade, PostgreSQL, SQL, Config ou capability Tauri n'est modifié ;
|
||
- [X] la version workspace devient `0.3.8-pre.10.fix.1` car un test Rust est modifié.
|
||
|
||
Le gate Cargo du fix reste à rejouer après application du delta.
|
||
|
||
## 37. `pre.010-fix.002` — canaris de hardening alignés sur la centralisation `pre.010`
|
||
|
||
Le gate opérateur de `0.3.8-pre.10.fix.1` confirme que les audits KSP, `cargo check --workspace`, Clippy, les 37 tests unitaires Store Desk, les dependency/desktop contract/public API tests et Store façade sont verts. Trois assertions `desktop_security.rs` restent obsolètes par rapport au code réellement introduit en `pre.010` :
|
||
|
||
- [X] les canaris Transaction et Account ne recherchent plus `request.offset.parse::<u64>()`, supprimé lors de la centralisation, mais vérifient l'appel commun `inspection_page_from_request(request.offset.as_str(), request.limit)` et le parse réel `offset_text.parse::<u64>()` dans le helper ;
|
||
- [X] les deux commandes Observation vérifient désormais la forme réellement formatée de `project_command_error(..., crate::TRACING_DOMAIN_STORE, &error)` ;
|
||
- [X] aucun invariant de sécurité n'est relâché : whitelist 25/50/100, offset `u64`, absence de `draw/search/order/cursor/network` dans les DTO et projection d'erreur statique restent contrôlés ;
|
||
- [X] aucun runtime, frontend, DTO, IPC, Store API/façade, PostgreSQL, SQL, Config ou capability Tauri n'est modifié ;
|
||
- [X] la version workspace devient `0.3.8-pre.10.fix.2` car un test Rust est modifié.
|
||
|
||
Le gate Cargo du fix reste à rejouer après application du delta.
|
||
|
||
## 38. Clôture `pre.010-fix.002` et préparation `pre.011` — release completeness
|
||
|
||
Le gate opérateur de `0.3.8-pre.10.fix.2` 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), 714 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS
|
||
cargo test -p ksp-app-store-desk: PASS (37 unitaires + 6 dependency + 15 desktop contract + 14 security + 1 public API)
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
```
|
||
|
||
`pre.011` n'ajoute aucune fonctionnalité runtime. La tranche ajoute un firewall de release completeness Store Desk :
|
||
|
||
- [X] `workspace.package.version = 0.3.8-pre.11` ;
|
||
- [X] inventaires directs Cargo exacts : build, runtime et dev dependencies Store Desk ;
|
||
- [X] inventaires npm exacts : runtime et dev dependencies, sans dépendance Select/DataTables parasite ;
|
||
- [X] inventaire exact des modules Rust `ksp-app-store-desk` ;
|
||
- [X] inventaire exact des dix commands Tauri ;
|
||
- [X] capability desktop exacte : fenêtres `splash/main`, permissions uniquement `core:default` et `tracing:default` ;
|
||
- [X] composition Config exacte `logging + store` pour `devnet/mainnet/testnet`, profil Logging `supertrace`, sans URI/credential/secret dans le composite ;
|
||
- [X] scan frontend hostile : aucun `fetch`/XHR/WebSocket/EventSource, aucun local/session storage/IndexedDB/cookie, aucun dialogue natif, aucune URI PostgreSQL/SQL/type backend physique ;
|
||
- [X] inventaire DTO visible exact et absence de `RawPageCursor`, backend physique ou source RAW bytes dans la surface IPC ;
|
||
- [X] rows Transaction/Account/Observation restent payload/data/source-byte-free ;
|
||
- [X] coexistence cursor + inspection verrouillée : exports `RawPageCursor`/`RawPageRequest` et `RawInspectionPageRequest` simultanés ;
|
||
- [X] statements PostgreSQL `LIST_*` historiques restent OFFSET-free ;
|
||
- [X] statements `INSPECT_*` restent random-access avec `OFFSET` ;
|
||
- [X] Store Desk runtime consomme `RawInspectionPageRequest` et ne consomme jamais `RawPageCursor` ;
|
||
- [X] aucun fichier Store API/façade/PostgreSQL/Config/runtime/frontend n'est modifié par `pre.011`.
|
||
|
||
Contrôles statiques d'assemblage : audits Rust/exports/Markdown propres avant création du delta. Le gate Cargo de `pre.011` reste à rejouer par l'opérateur.
|
||
|
||
## 39. `pre.011-fix.001` — conformité Clippy du firewall release-completeness
|
||
|
||
Le gate opérateur de `0.3.8-pre.11` confirme que les audits KSP, `cargo check --workspace`, les 6 tests `release_completeness`, les suites Store Desk et Store façade sont verts. `cargo clippy --workspace --all-targets` reste cependant bloquant sur dix occurrences `clippy::implicit-return` dans le nouveau firewall `release_completeness.rs`.
|
||
|
||
`pre.011-fix.001` corrige strictement ce défaut de test :
|
||
|
||
- [X] les closures `filter`, `map` et `filter_map` ajoutées en `pre.011` utilisent des `return` explicites conformément aux règles Rust KSP ;
|
||
- [X] les deux branches du `match` terminal de la closure de collecte des `profile_id` utilisent également des `return` explicites ;
|
||
- [X] aucun invariant de release completeness n'est modifié ou relâché ;
|
||
- [X] aucun runtime, frontend, DTO, IPC, Store API/façade, PostgreSQL, SQL, Config ou capability Tauri n'est modifié ;
|
||
- [X] la version workspace devient `0.3.8-pre.11.fix.1` car un test Rust est modifié.
|
||
|
||
Le gate Cargo du fix reste à rejouer après application du delta.
|
||
|
||
## 40. Clôture `pre.011-fix.001` et ouverture `pre.012` — gate technique final
|
||
|
||
Le gate opérateur de `0.3.8-pre.11.fix.1` est entièrement vert. La correction du firewall `release_completeness.rs` élimine les dix diagnostics `clippy::implicit-return` sans modifier les assertions ni les inventaires :
|
||
|
||
```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), 716 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets: PASS, aucun warning
|
||
cargo test -p ksp-app-store-desk: PASS
|
||
37 unitaires
|
||
6 dependency-boundary
|
||
15 desktop-contract
|
||
14 desktop-security
|
||
1 public-API
|
||
6 release-completeness
|
||
cargo test -p ksp-store-lib: PASS
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
```
|
||
|
||
`pre.011` est donc fermée sans réserve. `pre.012` n'ajoute aucun développement fonctionnel ; elle synchronise uniquement la prerelease et matérialise le gate technique final.
|
||
|
||
Gate déterministe requis :
|
||
|
||
```bash
|
||
cargo fmt --all -- --check
|
||
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 --all-features -- -D warnings
|
||
cargo test --workspace --all-targets --all-features
|
||
cargo check -p ksp-store-lib --no-default-features
|
||
|
||
cargo tree -p ksp-app-store-desk --edges normal
|
||
cargo tree -p ksp-app-store-desk -e features
|
||
cargo tree -p ksp-store-lib --edges normal
|
||
cargo tree -p ksp-store-lib -e features
|
||
cargo tree --duplicates
|
||
```
|
||
|
||
Les commandes constituent une séquence unique : un échec de format, audit, check, Clippy, test, feature-gate ou graphe bloque la clôture, même si le shell continue ensuite.
|
||
|
||
Smoke PostgreSQL/desktop : opt-in uniquement si le Store configuré est un environnement sûr en lecture. Il doit se limiter à ouvrir le Store, obtenir `ready`, charger une page Transaction et Account, ouvrir un détail/les observations lorsqu'une row existe, puis fermer proprement. Aucun chemin archive/purge/force-rehydrate ou autre mutation n'est admis. L'absence d'environnement live sûr est documentée et n'autorise aucune réussite inventée.
|
||
|
||
Après tous les contrôles précédents, le build Store Desk est exécuté **en dernière opération** :
|
||
|
||
```bash
|
||
(cd crates/ksp-app-store-desk && cargo tauri build)
|
||
```
|
||
|
||
Tout défaut ouvre `pre.012-fix.NNN` avant `pre.013`.
|
||
|
||
## 41. `pre.012-fix.001` — réalignement TypeScript Store Desk et fermeture du build frontend
|
||
|
||
Le gate technique final `pre.012` a confirmé que le format Rust, les audits, `cargo check`, Clippy `--all-targets --all-features -D warnings`, les tests workspace et le check Store sans feature par défaut sont verts. Le smoke Store Desk read-only a également fermé proprement le runtime.
|
||
|
||
Le build Tauri final a toutefois révélé un défaut de configuration frontend :
|
||
|
||
```text
|
||
TS2882: Cannot find module or type declarations for side-effect import of
|
||
'datatables.net-bs5/css/dataTables.bootstrap5.css'
|
||
```
|
||
|
||
Le `tsconfig.json` de Store Desk avait divergé du gabarit commun Config/Wallet/SOL Prices/Backfill et ne déclarait notamment pas les types `vite/client` et `node`. Un `npm i -D` sans changement de dépendances n'a pas corrigé le problème ; le réalignement de `tsconfig.json` sur le gabarit Desk commun a ensuite permis à `tsc && vite build` de passer et au build Tauri de produire les bundles `.deb` et `.rpm`.
|
||
|
||
`pre.012-fix.001` officialise strictement cette correction :
|
||
|
||
- [X] `crates/ksp-app-store-desk/tsconfig.json` est byte-for-byte identique au gabarit `ksp-app-backfill-desk/tsconfig.json`, lui-même aligné avec Config/Wallet/SOL Prices ;
|
||
- [X] `moduleResolution = "bundler"`, `allowImportingTsExtensions = true`, `types = ["vite/client", "node"]` et les garde-fous TypeScript communs sont présents ;
|
||
- [X] un canari `desktop_contract` impose désormais cet alignement exact ;
|
||
- [X] aucun runtime Rust, DTO, IPC, Store API/façade, PostgreSQL, SQL, migration, Config métier, capability Tauri ou dépendance npm n'est modifié ;
|
||
- [X] `workspace.package.version` devient `0.3.8-pre.12.fix.1` car `tsconfig.json` est un changement build/config et un test Rust est ajouté.
|
||
|
||
Le gate final doit être rejoué sur l'overlay officiel. Le build Tauri reste la dernière opération lourde et doit passer avec le `tsconfig.json` versionné par ce fix, sans correction locale supplémentaire.
|
||
|
||
## 42. Clôture `pre.012-fix.001` et réconciliation `pre.013`
|
||
|
||
Le gate opérateur rejoué sur l'overlay officiel `0.3.8-pre.12.fix.1` est entièrement vert :
|
||
|
||
```text
|
||
cargo fmt --all -- --check: PASS
|
||
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), 718 file(s))
|
||
cargo check --workspace: PASS
|
||
cargo clippy --workspace --all-targets --all-features -- -D warnings: PASS
|
||
cargo test --workspace --all-targets --all-features: PASS
|
||
1 592 passed
|
||
0 failed
|
||
15 ignored opt-in/operator-only
|
||
cargo check -p ksp-store-lib --no-default-features: PASS
|
||
cargo tree Store Desk / Store façade / features / duplicates: exécutés sans gate rouge
|
||
Store Desk frontend tsc + Vite build: PASS
|
||
Tauri release build: PASS
|
||
deb
|
||
rpm
|
||
```
|
||
|
||
Le canari `pre_012_fix_001_tsconfig_matches_common_ksp_desk_template_byte_exact` passe dans la suite `desktop_contract`, ce qui confirme que le réalignement TypeScript est bien versionné et non une correction locale.
|
||
|
||
La surface fonctionnelle finale vérifiée reste :
|
||
|
||
- [X] Overview/Diagnostics backend-neutral et secret-free ;
|
||
- [X] RAW Transactions DataTables server-side, filtres Store explicites, détail borné et rétention/tombstone read-only ;
|
||
- [X] RAW Accounts DataTables server-side, filtre pubkey exact/range/direction et détail data borné ;
|
||
- [X] observations Transaction/Account server-side, metadata/provenance uniquement et sans source bytes ;
|
||
- [X] counts exacts conservés en texte décimal jusqu'au contrôle JS-safe ;
|
||
- [X] DataTables est l'unique pager visible ;
|
||
- [X] la navigation machine cursor/keyset reste distincte et intacte ;
|
||
- [X] aucun SQL/backend physique, Transport, browser storage/network, dialogue natif ou command Store mutatif n'entre dans l'application ;
|
||
- [X] fermeture Store bornée avant exit.
|
||
|
||
`pre.013` réconcilie exclusivement README/USAGE, architecture/index et plan/validation sur cette preuve. `CHANGELOG.md`, `ROADMAP.md` et le prompt suivant restent réservés à `pre.014`.
|