v0.3.8-pre.013

This commit is contained in:
2026-09-04 09:58:20 +02:00
parent eaefec2259
commit c0b3190256
16 changed files with 521 additions and 27 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml # file: Cargo.toml
# version: 472 # version: 473
[workspace] [workspace]
resolver = "3" resolver = "3"
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib"] members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib"]
[workspace.package] [workspace.package]
version = "0.3.8-pre.12.fix.1" version = "0.3.8-pre.13"
edition = "2024" edition = "2024"
license = "MIT" license = "MIT"
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"

View File

@@ -1,5 +1,5 @@
<!-- file: README.md --> <!-- file: README.md -->
<!-- version: 9 --> <!-- version: 10 -->
# Khadhroony Solana Project # Khadhroony Solana Project
@@ -53,6 +53,8 @@ La couche RAW dispose d'une façade Store backend-neutral et d'un premier job hi
`ksp-app-backfill-desk` fournit la surface desktop spécialisée de composition de ce runtime : sélection d'un scope historique et d'un rôle HTTP logique, validation backend des bornes, Start single-run, monitoring latest-value, Cancel ciblé et Resume in-session sur checkpoint Rust-only. L'application ouvre Transport et Store via leurs façades KSP, ne dépend d'aucun backend Store concret et n'expose ni URL/credential, ni payload RAW, ni checkpoint opaque au frontend. `ksp-app-backfill-desk` fournit la surface desktop spécialisée de composition de ce runtime : sélection d'un scope historique et d'un rôle HTTP logique, validation backend des bornes, Start single-run, monitoring latest-value, Cancel ciblé et Resume in-session sur checkpoint Rust-only. L'application ouvre Transport et Store via leurs façades KSP, ne dépend d'aucun backend Store concret et n'expose ni URL/credential, ni payload RAW, ni checkpoint opaque au frontend.
`ksp-app-store-desk` fournit l'inspection desktop read-only du Store RAW via `ksp-store-lib` : health/runtime backend-neutral, tables server-side `RawTransaction` et `RawAccountState`, observations associées, détails avec previews bornées et lecture des états de rétention/tombstones. DataTables possède l'unique pagination visible de l'inspection random-access ; la pagination cursor/keyset des consumers machine reste distincte et intacte.
Ces contrats restent distincts des futurs workers continus : un job borné n'est ni un service worker ni un pipeline générique imposé aux autres couches. Ces contrats restent distincts des futurs workers continus : un job borné n'est ni un service worker ni un pipeline générique imposé aux autres couches.
## Points d'entrée ## Points d'entrée

View File

@@ -0,0 +1,106 @@
<!-- file: crates/ksp-app-store-desk/README.md -->
<!-- version: 1 -->
# `ksp-app-store-desk`
`ksp-app-store-desk` est lapplication desktop spécialisée dinspection read-only du Store KSP.
Elle reste une couche de composition Tauri : Config sélectionne le profil Store et Logging, `ksp-store-lib` possède la façade backend-neutral et les contrats dinspection, et le backend physique reste entièrement masqué à lapplication comme au frontend.
## Package
```text
package : ksp-app-store-desk
lib : ksp_app_store_desk_lib
bin : ksp-app-store-desk
```
Le binaire est un launcher mince. La bibliothèque applicative possède le bootstrap, le lifecycle Store, les DTOs Tauri, les commands, les projections de détail bornées et le bridge de tracing frontend.
## Composition
```text
ksp-config-lib -> composite, profils, secrets et runtime packagé
ksp-core-lib -> erreurs et primitives communes
ksp-store-lib -> façade Store backend-neutral et contrats RAW/inspection
ksp-logging-lib -> logging/tracing applicatif
ksp-app-store-desk -> orchestration Tauri + projections sûres read-only
```
Lapplication ne dépend pas directement de `ksp-store-api`, `ksp-store-postgres-lib`, `tokio-postgres` ou dun autre backend physique. Elle ne possède aucun SQL.
## Vues
La surface utilisateur comprend :
- **Overview** : état du runtime Store, health portable, réseau, backend logique, migration et compteurs de pool sûrs ;
- **RAW Transactions** : inspection DataTables server-side, filtres de slot et direction, état de rétention et détail explicite ;
- **RAW Accounts** : inspection DataTables server-side, filtre pubkey exact, plage de slots, direction et détail explicite ;
- **Diagnostics** : projection sûre du shell, de Config et du runtime Store.
Les détails Transaction et Account contiennent également leurs observations dans des DataTables server-side dédiées lorsque ces observations existent.
## Pagination et inspection
Store Desk utilise la surface dinspection random-access de `ksp-store-lib` : `offset + limit` avec counts exacts. DataTables est lunique propriétaire de la pagination visible et les tailles admises sont `25`, `50` et `100`.
Cette voie dinspection humaine ne remplace pas la pagination cursor/keyset du Store. Les workers, jobs et autres consumers machine peuvent continuer à utiliser `RawPageCursor` / `RawPageRequest`; Store Desk ne consomme pas ces cursors.
Le frontend conserve `draw` localement et ne transmet ni search globale DataTables, ni ordre de colonnes arbitraire, ni cursor, ni réseau physique au Store.
## Rows, détails et observations
Les rows de table ne transportent jamais les bytes RAW complets :
- Transaction : identité, slot, format, hash, taille éventuelle et état de rétention ;
- Account : pubkey, slot, state hash, owner, lamports, executable, rent epoch et longueur de data ;
- Observation : provenance dacquisition sûre et metadata bornées, sans source payload bytes.
Un détail est chargé explicitement pour une seule entité. Les previews payload Transaction et data Account sont limitées à **512 bytes**, rendues en hexadécimal et accompagnées de la taille exacte et dun indicateur de troncature.
Pour une Transaction, les états `Full`, `Archived` et `Purged` restent distincts. Un état `Purged` est représenté via son tombstone ; Store Desk noffre aucune action darchive, purge ou force-rehydrate.
## Valeurs longues et copie
Les signatures, hashes, pubkeys, owners et autres identifiants longs sont tronqués visuellement au centre tout en restant disponibles via tooltip et bouton de copie. La copie najoute aucune capability Tauri : elle utilise le WebView et le tracing ne transporte que lidentifiant logique du champ, jamais la valeur copiée.
## Config et réseaux
Le composite dédié est :
```text
cfg.composite.ksp-app-store-desk
```
Les profils committed couvrent `mainnet`, `devnet` et `testnet`. Mainnet est le profil par défaut. Le composite contient uniquement Logging + Store ; aucun Transport nest ouvert par lapplication.
Le frontend ne reçoit jamais URI Store, credential, secret Config, SQL, handle pool ou type backend physique.
## Sécurité et ownership
Store Desk est read-only par contrat applicatif : aucun command Tauri décriture Store nest exposé. Les capabilities guest restent limitées à `core:default` et `tracing:default`.
Le frontend ne possède ni accès réseau navigateur direct, ni persistence navigateur des données RAW, ni accès filesystem, ni dialogue natif pour contourner les façades KSP.
Les comptes et counts `u64` susceptibles dexcéder le domaine entier sûr JavaScript traversent IPC sous forme décimale et sont vérifiés avant conversion côté TypeScript.
## Ports et développement
```text
Vite HTTP : 1438
Vite WS : 1439
```
Lancement :
```bash
(cd crates/ksp-app-store-desk && cargo tauri dev)
```
Build production :
```bash
(cd crates/ksp-app-store-desk && cargo tauri build)
```
Voir également [`USAGE.md`](USAGE.md), [`../ksp-store-lib/README.md`](../ksp-store-lib/README.md), [`../../docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md`](../../docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md) et [`../../docs/validation/025-V0_3_8_STORE_DESK.md`](../../docs/validation/025-V0_3_8_STORE_DESK.md).

View File

@@ -0,0 +1,149 @@
<!-- file: crates/ksp-app-store-desk/USAGE.md -->
<!-- version: 1 -->
# Utilisation de `ksp-app-store-desk`
## 1. Lancement
Depuis la racine du workspace :
```bash
(cd crates/ksp-app-store-desk && cargo tauri dev)
```
Le runtime charge le composite Store Desk via `ksp-config-lib`, initialise Logging puis ouvre le Store sélectionné via `ksp-store-lib`.
## 2. Profil et readiness
Le composite `cfg.composite.ksp-app-store-desk` sélectionne un profil Logging et un profil Store. Mainnet est le profil par défaut ; Devnet et Testnet sont également définis dans la configuration committed.
La vue **Overview** expose notamment :
```text
Store open
health state
profile
network
backend kind
migration version / pending migrations
pool size / capacity / available / waiting
```
Ces informations sont des projections portables. Elles ne contiennent jamais URI PostgreSQL, credential, secret ou handle physique.
## 3. RAW Transactions
La vue **RAW Transactions** charge les données côté serveur via la façade dinspection Store.
Filtres disponibles :
```text
slot minimum
slot maximum
direction ascending / descending
```
La table affiche des summaries sans payload RAW complet. Les signatures et hashes longs restent copiables sans que leur valeur soit journalisée.
Le bouton de détail recharge explicitement une seule Transaction. Le modal affiche les metadata canoniques, létat de rétention et, lorsquun payload est encore retenu, un preview hexadécimal limité à 512 bytes avec taille exacte et indicateur de troncature.
Un état `Purged` est présenté à partir du tombstone disponible. Aucune opération darchive, purge ou force-rehydrate nest proposée par lapplication.
## 4. RAW Accounts
La vue **RAW Accounts** utilise le même modèle dinspection server-side.
Filtres disponibles :
```text
pubkey exacte
slot minimum
slot maximum
direction ascending / descending
```
La table ne transporte pas les bytes Account. Elle expose seulement les metadata utiles : pubkey, slot, state hash, owner, lamports, executable, rent epoch et longueur de data.
Le détail recharge exactement lidentité `(pubkey, slot, state_hash)` puis affiche un preview hexadécimal de data limité à 512 bytes, la longueur exacte et lindicateur de troncature.
## 5. Observations
Les modals Transaction et Account contiennent une table **Observations** associée à lentité actuellement ouverte.
La table est server-side et expose uniquement de la provenance sûre : provider logique, protocole, méthode/origine dacquisition, timestamps, endpoint/session/filter/commitment lorsquils existent, hash/taille de source et metadata Account optionnelles admises.
Les bytes du payload source ne traversent jamais IPC.
## 6. Pagination DataTables
Les tables Transactions, Accounts et Observations utilisent DataTables comme unique pager visible.
Tailles disponibles :
```text
25
50
100
```
Le frontend mappe `start` vers loffset Store et `length` vers la limite. Les counts exacts restent des chaînes décimales jusquà vérification du domaine `Number.MAX_SAFE_INTEGER`.
La pagination dinspection est distincte de la pagination cursor/keyset utilisée par les consumers machine du Store. Store Desk naccepte ni cursor, ni search globale DataTables, ni tri arbitraire de colonnes.
## 7. Rafraîchissement et filtres
**Refresh** redessine la table concernée avec ses filtres Store explicites. Un changement de filtre repart de la première page.
Les valeurs de filtre sont validées côté Rust : slots décimaux, pubkey canonique et direction autorisée. Elles ne sont pas injectées dans les logs frontend.
## 8. Valeurs longues et copie
Les valeurs longues sont affichées sous forme tronquée au centre. Le survol permet de consulter la valeur complète et le bouton de copie copie la valeur actuellement affichée par le frontend.
Les événements de tracing de copie transportent uniquement un `fieldId` logique. Ils ne contiennent jamais signature, pubkey, owner, hash ou preview hex.
## 9. Read-only et frontières
Store Desk est un outil dinspection. Il ne fournit aucune commande pour :
```text
écrire une entité RAW
ajouter une observation
archiver
purger
force-rehydrate
démarrer un backfill
démarrer un worker
modifier la configuration Store
```
Ces responsabilités appartiennent aux composants KSP propriétaires.
Le frontend ne reçoit jamais :
```text
URI Store
credentials/secrets
SQL
handles backend/pool
payload RAW complet
data Account complète
source payload bytes
contexte derreur arbitraire
```
## 10. Fermeture
La fermeture de la fenêtre principale bloque les nouvelles admissions puis ferme le Store de manière bornée avant de terminer le process.
Le shutdown applicatif neffectue aucune mutation métier de rétention ou de données.
## 11. Build production
Depuis la racine du workspace :
```bash
(cd crates/ksp-app-store-desk && cargo tauri build)
```
Le build frontend passe par TypeScript puis Vite avant le build Tauri. Les resources Config enregistrées sont packagées selon le contrat commun des applications Desk KSP.

142
deltas/0.3.8/pre.013.md Normal file
View File

@@ -0,0 +1,142 @@
<!-- file: deltas/0.3.8/pre.013.md -->
<!-- version: 1 -->
# Delta `0.3.8-pre.013` — réconciliation documentaire finale Store Desk
## 1. Base requise
```text
0.3.8-pre.012-fix.001
workspace.package.version = 0.3.8-pre.12.fix.1
```
Le gate technique final de cette base est entièrement vert : format check, audits Rust/Markdown, `cargo check`, Clippy all-targets/all-features avec `-D warnings`, tests workspace all-targets/all-features, Store façade sans default features, graphes Cargo et build Tauri Linux `deb`/`rpm`.
## 2. Objectif
Réconcilier exclusivement la documentation durable avec la surface réellement livrée de Store Desk. Aucun runtime, test, frontend, Config, Store API/façade/PostgreSQL, SQL, migration ou manifest de crate n'est rouvert.
## 3. Version
```text
workspace.package.version = 0.3.8-pre.13
```
Le bump prerelease est mécanique ; aucune autre propriété Cargo n'est modifiée.
## 4. Réconciliation durable
- ajout des `README.md` et `USAGE.md` de `ksp-app-store-desk` ;
- README racine et index docs/plans/validation synchronisés ;
- architecture Layers/Contracts/Inventory/Dependency Graph/Data & Store/Apps & Services réalignée ;
- plan Store Desk réconcilié sur la surface finale ;
- validation finale enrichie avec la preuve opérateur du gate `pre.012-fix.001`.
`USAGE.md` reste strictement version-neutral : aucun journal de prerelease/gate n'y est ajouté.
## 5. Contrat final documenté
```text
Config + Core + Logging + ksp-store-lib
Overview / Diagnostics backend-neutral
RAW Transactions server-side + détail borné
RAW Accounts server-side + détail borné
observations Transaction/Account server-side
DataTables = seul pager visible
inspection = offset/limit/counts exacts
machine/replay = keyset/cursor conservé
previews detail = 512 bytes max
rétention/tombstone = lecture uniquement
aucun SQL/backend physique/Transport/write Store
```
## 6. Gate technique enregistré
```text
1 592 tests passés
0 échec
15 tests ignorés opt-in/operator-only
Clippy -D warnings propre
ksp-store-lib --no-default-features propre
frontend tsc + Vite build propre
2 bundles Tauri Linux : deb, rpm
```
## 7. Hors scope
```text
CHANGELOG.md
ROADMAP.md
prompt suivant
src/**
tests/** hors documentation existante
frontend/**
Config runtime
Store API/façade/PostgreSQL
SQL/schema/migrations
manifest de crate
nouvelle dépendance
```
Ces surfaces de publication restent réservées à `pre.014`.
## 8. Fichiers ajoutés
```text
crates/ksp-app-store-desk/README.md
crates/ksp-app-store-desk/USAGE.md
deltas/0.3.8/pre.013.md
```
## 9. Fichiers modifiés
```text
Cargo.toml
README.md
docs/000-README.md
docs/plans/000-README.md
docs/validation/000-README.md
docs/architecture/002-LAYERS_AND_DEPENDENCIES.md
docs/architecture/003-COMPONENT_CONTRACTS.md
docs/architecture/004-COMPONENT_INVENTORY.md
docs/architecture/005-DEPENDENCY_GRAPH.md
docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md
docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md
docs/plans/029-V0_3_8_STORE_DESK_PLAN.md
docs/validation/025-V0_3_8_STORE_DESK.md
```
## 10. Fichiers supprimés
Aucun.
## 11. Validations de lenvironnement dassemblage
```text
python3 scripts/audit_rust_workspace_rules.py : clean
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas : clean, 314 tables / 721 fichiers
contrôle différentiel strict : 3 ajouts / 13 modifications / 0 suppression
CHANGELOG.md / ROADMAP.md : inchangés
USAGE.md : version-neutral
reconstruction exacte de loverlay sur pre.012-fix.001
```
Cargo/rustc/rustfmt/Tauri ne sont pas disponibles dans lenvironnement dassemblage ; le gate technique autoritaire reste celui de `pre.012-fix.001`.
## 12. Gate documentaire après application
```bash
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
```
Aucun replay du build Tauri ou des 1 592 tests nest requis pour cette tranche documentaire si ces deux audits restent propres et si loverlay appliqué est exactement celui livré.
## 13. Suite
```text
0.3.8-pre.014 — préparation publication + prompt 0.3.9
0.3.8-rel.001 — publication stable v0.3.8
```
Tout défaut strictement documentaire découvert dans cette tranche ouvre `pre.013-fix.NNN`. Aucun rattrapage fonctionnel n'est admis dans la lane de publication.

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/002-LAYERS_AND_DEPENDENCIES.md --> <!-- file: docs/architecture/002-LAYERS_AND_DEPENDENCIES.md -->
<!-- version: 10 --> <!-- version: 11 -->
# Couches et dépendances KSP # Couches et dépendances KSP
@@ -134,7 +134,7 @@ Les applications Tauri restent minces :
- instrumentation frontend ; - instrumentation frontend ;
- aucun déplacement de logique de transport, Wallet, Config, Program, Store ou Materializer dans Tauri. - aucun déplacement de logique de transport, Wallet, Config, Program, Store ou Materializer dans Tauri.
Des applications spécialisées sont ajoutées au fur et à mesure pour valider les couches : Config Desk, Wallet Desk, `ksp-app-solprices-desk`, `ksp-app-backfill-desk`, Store/RAW tooling, CORE tooling puis Market Desk. `ksp-app-solprices-desk` reste une HID mince : elle consomme linventaire, les observations, les états et les opérations génériques de `ksp-offchain-transport-lib` sans connaître les providers, leurs endpoints, leurs credentials ni leurs limites. `ksp-app-backfill-desk` compose Config, Transport HTTP, Store et `ksp-job-backfill-lib` sans absorber découverte, retry/rate-limit, persistance ou checkpoint ; son frontend ne reçoit que des DTOs sûrs et le checkpoint de reprise reste Rust-only. Des applications spécialisées sont ajoutées au fur et à mesure pour valider les couches : Config Desk, Wallet Desk, `ksp-app-solprices-desk`, `ksp-app-backfill-desk`, `ksp-app-store-desk`, CORE tooling puis Market Desk. `ksp-app-solprices-desk` reste une HID mince : elle consomme linventaire, les observations, les états et les opérations génériques de `ksp-offchain-transport-lib` sans connaître les providers, leurs endpoints, leurs credentials ni leurs limites. `ksp-app-backfill-desk` compose Config, Transport HTTP, Store et `ksp-job-backfill-lib` sans absorber découverte, retry/rate-limit, persistance ou checkpoint ; son frontend ne reçoit que des DTOs sûrs et le checkpoint de reprise reste Rust-only. `ksp-app-store-desk` compose Config, Logging et `ksp-store-lib` pour une inspection RAW read-only : il n'accède ni au backend physique ni au SQL et sépare la pagination random-access de l'interface de la pagination cursor/keyset réservée aux consumers machine.
## Workers et jobs ## Workers et jobs

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/003-COMPONENT_CONTRACTS.md --> <!-- file: docs/architecture/003-COMPONENT_CONTRACTS.md -->
<!-- version: 14 --> <!-- version: 15 -->
# Contrats initiaux des composants KSP # Contrats initiaux des composants KSP
@@ -214,6 +214,8 @@ Une application globale reste future.
`ksp-app-backfill-desk` est l'interface spécialisée du premier job historique. Elle dépend des façades KSP nécessaires à la composition (`ksp-config-lib`, `ksp-job-api`, `ksp-job-backfill-lib`, `ksp-onchain-transport-lib`, `ksp-store-lib`, Core et Logging), garde Store/Transport/checkpoint côté Rust et expose uniquement les options, demandes opérateur bornées, états latest-value et acquittements de contrôle sûrs. `ksp-app-backfill-desk` est l'interface spécialisée du premier job historique. Elle dépend des façades KSP nécessaires à la composition (`ksp-config-lib`, `ksp-job-api`, `ksp-job-backfill-lib`, `ksp-onchain-transport-lib`, `ksp-store-lib`, Core et Logging), garde Store/Transport/checkpoint côté Rust et expose uniquement les options, demandes opérateur bornées, états latest-value et acquittements de contrôle sûrs.
`ksp-app-store-desk` est l'interface spécialisée d'inspection du Store RAW. Elle dépend de `ksp-config-lib`, `ksp-core-lib`, `ksp-logging-lib` et `ksp-store-lib`, conserve le Store ouvert côté Rust, expose uniquement des DTOs app-owned backend-neutral et ne fournit aucun command d'écriture. Les tables utilisent les capabilities d'inspection random-access ; les détails rechargent une seule entité et bornent les previews RAW sans déplacer la rétention ou le backend dans Tauri.
## Progression verticale Program ## Progression verticale Program
À partir de DECODE : À partir de DECODE :

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/004-COMPONENT_INVENTORY.md --> <!-- file: docs/architecture/004-COMPONENT_INVENTORY.md -->
<!-- version: 32 --> <!-- version: 33 -->
# Inventaire initial des composants KSP # Inventaire initial des composants KSP
@@ -43,6 +43,7 @@ Ce document maintient l'inventaire synthétique des composants retenus ou presse
| Job lifecycle | `ksp-job-api` | API | Implémenté | `0.3.6` | identité/lifecycle/annulation/notifications latest-value runtime-neutral | | Job lifecycle | `ksp-job-api` | API | Implémenté | `0.3.6` | identité/lifecycle/annulation/notifications latest-value runtime-neutral |
| Backfill | `ksp-job-backfill-lib` | lib | Implémenté | `0.3.6` | backfill `RawTransaction` borné via Transport observé + Store, checkpoint et runtime | | Backfill | `ksp-job-backfill-lib` | lib | Implémenté | `0.3.6` | backfill `RawTransaction` borné via Transport observé + Store, checkpoint et runtime |
| Backfill Desk | `ksp-app-backfill-desk` | app | Implémenté | `0.3.7` | Start/monitoring/Cancel/Resume in-session du backfill RAW via façades KSP | | Backfill Desk | `ksp-app-backfill-desk` | app | Implémenté | `0.3.7` | Start/monitoring/Cancel/Resume in-session du backfill RAW via façades KSP |
| Store Desk | `ksp-app-store-desk` | app | Implémenté | `0.3.8` | inspection RAW read-only Transaction/Account/Observation via façade Store |
| Worker lifecycle | `ksp-worker-api` | API | Retenu | fin couche RAW | lifecycle des services continus | | Worker lifecycle | `ksp-worker-api` | API | Retenu | fin couche RAW | lifecycle des services continus |
| RAW worker | `ksp-worker-raw-retriever` ou nom révisé | worker | Retenu | fin couche RAW | acquisition live vers RAW | | RAW worker | `ksp-worker-raw-retriever` ou nom révisé | worker | Retenu | fin couche RAW | acquisition live vers RAW |
| CORE processor | nom à fixer | processor/lib | Retenu | couche CORE | normalisation Solana générique RAW -> CORE | | CORE processor | nom à fixer | processor/lib | Retenu | couche CORE | normalisation Solana générique RAW -> CORE |
@@ -150,7 +151,6 @@ Market Desk est progressive : V1 après les DEX prioritaires, puis enrichissemen
## Questions restantes ## Questions restantes
- nom exact de Backfill Desk ;
- nécessité future d'un pool automatique WS ; - nécessité future d'un pool automatique WS ;
- types exacts `ksp-materializer-api` lors de l'ouverture DECODE ; - types exacts `ksp-materializer-api` lors de l'ouverture DECODE ;
- nom/packaging précis du premier RAW worker et du CORE normalizer ; - nom/packaging précis du premier RAW worker et du CORE normalizer ;

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/005-DEPENDENCY_GRAPH.md --> <!-- file: docs/architecture/005-DEPENDENCY_GRAPH.md -->
<!-- version: 21 --> <!-- version: 22 -->
# Graphe de dépendances KSP # Graphe de dépendances KSP
@@ -440,6 +440,18 @@ ksp-app-backfill-desk
La Desk compose les ressources et contrôles du job sans traverser la façade Store : aucune dépendance directe à `ksp-store-api`, `ksp-store-postgres-lib`, `tokio-postgres`, `reqwest`, `tonic` ou `yellowstone-grpc-proto`. Le frontend ne connaît que des rôles HTTP logiques et des DTOs sûrs ; endpoints, credentials, backend Store, RAW et checkpoint concret restent sous les composants Rust propriétaires. La Desk compose les ressources et contrôles du job sans traverser la façade Store : aucune dépendance directe à `ksp-store-api`, `ksp-store-postgres-lib`, `tokio-postgres`, `reqwest`, `tonic` ou `yellowstone-grpc-proto`. Le frontend ne connaît que des rôles HTTP logiques et des DTOs sûrs ; endpoints, credentials, backend Store, RAW et checkpoint concret restent sous les composants Rust propriétaires.
### Store Desk
```text
ksp-app-store-desk
-> ksp-config-lib
-> ksp-core-lib
-> ksp-logging-lib
-> ksp-store-lib
```
Store Desk est un consumer read-only de la façade Store. Il ne dépend pas directement de `ksp-store-api`, `ksp-store-postgres-lib` ou `tokio-postgres`, ne possède aucun SQL et n'ouvre aucun Transport. Les capabilities d'inspection random-access alimentent les DataTables server-side ; les reads par identité alimentent les détails bornés. Les URI, secrets, handles backend, payloads complets et source bytes ne traversent pas la frontière frontend.
### Market Desk ### Market Desk
```text ```text

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md --> <!-- file: docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md -->
<!-- version: 5 --> <!-- version: 6 -->
# Data, Materialization et Store # Data, Materialization et Store
@@ -325,6 +325,21 @@ Le backend PostgreSQL officiel appartient à `ksp-store-postgres-lib`. Cette cra
La pagination/cursorisation reste un contrat de navigation Store. Une limite demandée par lappelant peut être validée pour sa forme/sécurité, mais aucun plafond métier global arbitraire ni batch-size de worker nest introduit par le runtime Store. La pagination/cursorisation reste un contrat de navigation Store. Une limite demandée par lappelant peut être validée pour sa forme/sécurité, mais aucun plafond métier global arbitraire ni batch-size de worker nest introduit par le runtime Store.
### Navigation machine et inspection humaine
Deux contrats complémentaires coexistent sans collision :
```text
workers / jobs / replay -> RawPageRequest + RawPageCursor -> keyset
inspection UI -> RawInspectionPageRequest -> offset + limit + counts exacts
```
La voie cursor/keyset reste canonique pour la navigation machine et les replays : le cursor est opaque, lié au contexte de query et ne dépend pas d'un `OFFSET` profond.
La voie `RawInspectionPageRequest` est backend-neutral mais conçue pour une inspection humaine random-access. Elle peut demander des counts exacts et un offset absolu ; le backend PostgreSQL peut implémenter cette capability avec `COUNT` et `OFFSET` privés. Ce choix ne réécrit jamais les statements keyset historiques.
`ksp-app-store-desk` est le consumer actuel de cette voie d'inspection. DataTables possède l'unique pager visible et l'application ne reçoit aucun cursor Store. Les summaries d'inspection restent sans payload/data RAW ; un détail explicite peut recharger une seule entité avec une projection applicative bornée.
## `ksp-materializer-api` et `ksp-materializer-lib` ## `ksp-materializer-api` et `ksp-materializer-lib`
Ils sont introduits seulement lorsque le premier groupe DECODE démontre le contrat réel. Ils sont introduits seulement lorsque le premier groupe DECODE démontre le contrat réel.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md --> <!-- file: docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md -->
<!-- version: 9 --> <!-- version: 10 -->
# Applications, services, scenarios et control plane # Applications, services, scenarios et control plane
@@ -117,6 +117,9 @@ ksp-app-backfill-desk
-> ksp-store-lib -> ksp-store-lib
ksp-app-store-desk ksp-app-store-desk
-> ksp-config-lib
-> ksp-core-lib
-> ksp-logging-lib
-> ksp-store-lib -> ksp-store-lib
``` ```
@@ -124,6 +127,8 @@ ksp-app-store-desk
Backfill Desk suit exactement cette règle : elle ouvre Store via `ksp-store-lib`, construit le pool HTTP via `ksp-onchain-transport-lib`, puis remet ces ressources à `ksp-job-backfill-lib`. Start/Cancel/Resume restent des opérations applicatives de composition ; le checkpoint de reprise et les ressources physiques ne deviennent jamais des DTOs Tauri. Backfill Desk suit exactement cette règle : elle ouvre Store via `ksp-store-lib`, construit le pool HTTP via `ksp-onchain-transport-lib`, puis remet ces ressources à `ksp-job-backfill-lib`. Start/Cancel/Resume restent des opérations applicatives de composition ; le checkpoint de reprise et les ressources physiques ne deviennent jamais des DTOs Tauri.
Store Desk suit la même frontière sans Transport : Config sélectionne Logging + Store, `ksp-store-lib` fournit health, reads et inspection backend-neutral, et le Store ouvert reste côté Rust. Les DataTables frontend consomment des summaries server-side et counts exacts ; les détails chargent une seule entité avec preview bornée. Aucun command d'écriture, SQL, cursor opaque, backend physique ou secret Store n'est exposé à Tauri/TypeScript.
Les couches N1N4 expriment des responsabilités et une direction de dépendances ; elles n'imposent pas de traverser toutes les couches intermédiaires. Les couches N1N4 expriment des responsabilités et une direction de dépendances ; elles n'imposent pas de traverser toutes les couches intermédiaires.
## Tauri ## Tauri

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/000-README.md --> <!-- file: docs/plans/000-README.md -->
<!-- version: 71 --> <!-- version: 72 -->
# Plans KSP # Plans KSP
@@ -36,6 +36,8 @@ Un plan décrit le périmètre, les décisions déjà acquises, les questions ou
- [`025-V0_3_4_STORE_POSTGRES_RAW_ACCOUNT_PLAN.md`](025-V0_3_4_STORE_POSTGRES_RAW_ACCOUNT_PLAN.md) — plan historique clôturé de `0.3.4 — Store/PostgreSQL RawAccountState + complétude RAW`; il complète le backend/façade à dix capabilities RAW et ferme V002. - [`025-V0_3_4_STORE_POSTGRES_RAW_ACCOUNT_PLAN.md`](025-V0_3_4_STORE_POSTGRES_RAW_ACCOUNT_PLAN.md) — plan historique clôturé de `0.3.4 — Store/PostgreSQL RawAccountState + complétude RAW`; il complète le backend/façade à dix capabilities RAW et ferme V002.
- [`026-V0_3_5_INTERFACE_ACQUISITION_EVENTS_PLAN.md`](026-V0_3_5_INTERFACE_ACQUISITION_EVENTS_PLAN.md) — plan historique clôturé de `0.3.5 — Interface acquisition events`; il fixe les faits passifs provider-neutral `SlotLifecycleEvent` et `TransactionExecutionEvent` sans runtime ni persistence. - [`026-V0_3_5_INTERFACE_ACQUISITION_EVENTS_PLAN.md`](026-V0_3_5_INTERFACE_ACQUISITION_EVENTS_PLAN.md) — plan historique clôturé de `0.3.5 — Interface acquisition events`; il fixe les faits passifs provider-neutral `SlotLifecycleEvent` et `TransactionExecutionEvent` sans runtime ni persistence.
- [`027-V0_3_6_JOB_API_BACKFILL_PLAN.md`](027-V0_3_6_JOB_API_BACKFILL_PLAN.md) — plan candidat de `0.3.6 — Job API + RAW transaction backfill`; il fixe le contrat Job runtime-neutral, les quatre scopes historiques, RAW v1, provenance observée, persistance Store normale, concurrence/frontier/checkpoint et runtime latest-value annulable. - [`027-V0_3_6_JOB_API_BACKFILL_PLAN.md`](027-V0_3_6_JOB_API_BACKFILL_PLAN.md) — plan candidat de `0.3.6 — Job API + RAW transaction backfill`; il fixe le contrat Job runtime-neutral, les quatre scopes historiques, RAW v1, provenance observée, persistance Store normale, concurrence/frontier/checkpoint et runtime latest-value annulable.
- [`028-V0_3_7_BACKFILL_DESK_PLAN.md`](028-V0_3_7_BACKFILL_DESK_PLAN.md) — plan historique clôturé de `0.3.7 — Backfill Desk`; il fixe la composition Config/Transport/Store/Job, Start single-run, monitoring latest-value, Cancel ciblé, Resume in-session Rust-only, autocomplete Program IDs et packaging Tauri.
- [`029-V0_3_8_STORE_DESK_PLAN.md`](029-V0_3_8_STORE_DESK_PLAN.md) — plan candidat réconcilié de `0.3.8 — Store Desk V1 RAW`; il fixe la composition Config+Store, l'inspection backend-neutral Transaction/Account/Observation, DataTables server-side random-access, détails bornés, rétention read-only et le maintien de la pagination keyset/cursor machine.
Le `pre.001` de chaque release fonctionnelle peut introduire son propre plan détaillé lorsque la release s'ouvre. Le `pre.001` de chaque release fonctionnelle peut introduire son propre plan détaillé lorsque la release s'ouvre.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/029-V0_3_8_STORE_DESK_PLAN.md --> <!-- file: docs/plans/029-V0_3_8_STORE_DESK_PLAN.md -->
<!-- version: 14 --> <!-- version: 15 -->
# Plan v0.3.8 — Store Desk V1 RAW # Plan v0.3.8 — Store Desk V1 RAW
@@ -661,7 +661,7 @@ Un défaut ouvre `pre.012-fix.NNN`; aucune réconciliation README/USAGE durable
### pre.013 — réconciliation documentaire finale ### pre.013 — réconciliation documentaire finale
README/USAGE Store Desk, architecture/index, plan/validation. Aucun changement runtime. README/USAGE Store Desk, architecture/index, plan/validation. Aucun changement runtime. Le gate technique autoritaire est `pre.012-fix.001`, entièrement vert après réalignement du `tsconfig.json` Store Desk sur le gabarit Desk commun.
### pre.014 — préparation publication ### pre.014 — préparation publication
@@ -694,3 +694,19 @@ browser persistence RAW
L'utilisation de `OFFSET` et `COUNT` est autorisée uniquement dans l'implémentation privée PostgreSQL de la nouvelle capability d'inspection ; elle reste interdite dans l'application et ne remplace pas les queries keyset existantes. L'utilisation de `OFFSET` et `COUNT` est autorisée uniquement dans l'implémentation privée PostgreSQL de la nouvelle capability d'inspection ; elle reste interdite dans l'application et ne remplace pas les queries keyset existantes.
## 21. Réconciliation documentaire finale
La surface réellement livrée est désormais réconciliée sans rouvrir le runtime :
- `ksp-app-store-desk` est documentée comme application read-only de `ksp-store-lib` composée avec Config/Core/Logging ;
- Overview expose uniquement health/runtime portable et diagnostics sûrs ;
- Transactions et Accounts utilisent DataTables server-side avec inspection random-access backend-neutral, counts exacts et tailles 25/50/100 ;
- les observations sont listées server-side dans le détail de leur entité exacte ;
- les rows restent sans payload/data/source bytes et les previews de détail restent bornés à 512 bytes ;
- les états Transaction `Full` / `Archived` / `Purged` et tombstones sont lisibles sans action destructive ;
- la pagination machine `RawPageCursor`/keyset et l'inspection `RawInspectionPageRequest`/offset restent deux contrats distincts ;
- aucun Transport, SQL app-owned, backend PostgreSQL direct, write Store, archive/purge/force-rehydrate, backfill ou worker control n'entre dans Store Desk.
Le gate technique final autoritaire a validé 1 592 tests, zéro échec, 15 tests opt-in/operator-only ignorés, Clippy `-D warnings`, la façade Store sans default features et deux bundles Tauri Linux (`deb`, `rpm`).
La lane suivante reste strictement publication-only : `pre.014` peut modifier CHANGELOG/ROADMAP et produire le prompt `0.3.9`, sans rouvrir la documentation technique ou le code de `0.3.8`.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/000-README.md --> <!-- file: docs/validation/000-README.md -->
<!-- version: 36 --> <!-- version: 37 -->
# Validations KSP # Validations KSP
@@ -33,3 +33,4 @@ Documents :
- [`022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md`](022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md) — matrice finale de `0.3.5 — Interface acquisition events` : événements passifs slot/transaction, façade crate-root, bornes/debug et firewall Interface. - [`022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md`](022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md) — matrice finale de `0.3.5 — Interface acquisition events` : événements passifs slot/transaction, façade crate-root, bornes/debug et firewall Interface.
- [`023-V0_3_6_JOB_API_BACKFILL.md`](023-V0_3_6_JOB_API_BACKFILL.md) — matrice candidate de `0.3.6 — Job API + RAW transaction backfill` : lifecycle/notifications runtime-neutral, scopes, provenance, RAW v1, Store/idempotence, concurrence/checkpoint, annulation/snapshots, hardening externe et gate workspace final. - [`023-V0_3_6_JOB_API_BACKFILL.md`](023-V0_3_6_JOB_API_BACKFILL.md) — matrice candidate de `0.3.6 — Job API + RAW transaction backfill` : lifecycle/notifications runtime-neutral, scopes, provenance, RAW v1, Store/idempotence, concurrence/checkpoint, annulation/snapshots, hardening externe et gate workspace final.
- [`024-V0_3_7_BACKFILL_DESK.md`](024-V0_3_7_BACKFILL_DESK.md) — matrice candidate de `0.3.7 — Backfill Desk` : composition Config/Transport/Store/Job, scopes et rôles HTTP, single-run, monitoring latest-value, Cancel, Resume in-session Rust-only, autocomplete Program IDs, hardening et gate workspace/Tauri final. - [`024-V0_3_7_BACKFILL_DESK.md`](024-V0_3_7_BACKFILL_DESK.md) — matrice candidate de `0.3.7 — Backfill Desk` : composition Config/Transport/Store/Job, scopes et rôles HTTP, single-run, monitoring latest-value, Cancel, Resume in-session Rust-only, autocomplete Program IDs, hardening et gate workspace/Tauri final.
- [`025-V0_3_8_STORE_DESK.md`](025-V0_3_8_STORE_DESK.md) — matrice candidate finale de `0.3.8 — Store Desk V1 RAW` : composition Config/Store, inspection random-access Transaction/Account/Observation, DataTables server-side, DTOs payload/data-free, détails bornés, rétention/tombstones read-only, hardening IPC/frontend, release completeness et gate workspace/Tauri final.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/025-V0_3_8_STORE_DESK.md --> <!-- file: docs/validation/025-V0_3_8_STORE_DESK.md -->
<!-- version: 28 --> <!-- version: 29 -->
# Validation v0.3.8 — Store Desk V1 RAW # Validation v0.3.8 — Store Desk V1 RAW
@@ -94,13 +94,13 @@ Le journal opérateur fourni pour v0.3.7 rapporte un gate complet. Il reste une
- [X] `pre.004` PostgreSQL + façade inspection RawTransaction ; - [X] `pre.004` PostgreSQL + façade inspection RawTransaction ;
- [X] `pre.005` PostgreSQL + façade inspection RawAccountState ; - [X] `pre.005` PostgreSQL + façade inspection RawAccountState ;
- [X] `pre.006` composite Logging+Store + Overview/health ; - [X] `pre.006` composite Logging+Store + Overview/health ;
- [ ] `pre.007` RawTransaction DataTables serverSide + détail ; - [X] `pre.007` RawTransaction DataTables serverSide + détail ;
- [ ] `pre.008` RawAccountState DataTables serverSide + détail ; - [X] `pre.008` RawAccountState DataTables serverSide + détail ;
- [ ] `pre.009` observation listing/inspection Store ; - [X] `pre.009` observation listing/inspection Store ;
- [ ] `pre.010` observations UI + hardening UX ; - [X] `pre.010` observations UI + hardening UX ;
- [ ] `pre.011` security/dependency/release completeness ; - [X] `pre.011` security/dependency/release completeness ;
- [ ] `pre.012` gate technique final + Tauri build + smoke read-only opt-in ; - [X] `pre.012` gate technique final + Tauri build + smoke read-only opt-in ;
- [ ] `pre.013` réconciliation documentaire ; - [X] `pre.013` réconciliation documentaire ;
- [ ] `pre.014` prompt suivant + CHANGELOG + ROADMAP ; - [ ] `pre.014` prompt suivant + CHANGELOG + ROADMAP ;
- [ ] `rel.001` publication stable v0.3.8. - [ ] `rel.001` publication stable v0.3.8.
@@ -913,3 +913,43 @@ Le `tsconfig.json` de Store Desk avait divergé du gabarit commun Config/Wallet/
- [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é. - [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. 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`.