v0.2.6-rel.001

This commit is contained in:
2026-08-22 14:16:31 +02:00
parent 79fee574d9
commit 3c9c1d1349
32 changed files with 428 additions and 279 deletions

View File

@@ -1,8 +1,16 @@
<!-- file: CHANGELOG.md --> <!-- file: CHANGELOG.md -->
<!-- version: 9 --> <!-- version: 10 -->
# Changelog KSP # Changelog KSP
Ce changelog résume uniquement les releases KSP considérées comme stables, dans l'ordre chronologique décroissant. Les détails de chaque livraison restent dans `deltas/`.
## 0.2.6 — Wallet Desk + `.kspwallet` V2 — 2026-08-22
`0.2.6` stabilise `ksp-app-wallet-desk` comme seconde application Tauri KSP spécialisée et étend `ksp-wallet-lib` avec le wire binaire `.kspwallet` V2. Wallet Desk compose Config, Wallet, Transport HTTP et Logging sans déplacer leurs responsabilités : inventory root-scoped et symlink-safe, création/import V2 par défaut, ouverture VIEW/OWNER V1/V2, candidats secrets résolus exclusivement par Config, `getBalance` Devnet via Transport, administration alias/notes, rotations OWNER/VIEW, disable/recreate VIEW fort et export Solana CLI JSON/Base58. Les secrets, keypairs, handles, chemins complets import/export et credentials Config restent côté Rust ; le frontend ne reçoit que des projections sûres et utilise des modals Bootstrap pour les opérations privilégiées.
Le format V1 JSON reste stable et lisible ; V2 ajoute un framing binaire KSP canonique, des IDs numériques, longueurs big-endian et domains/transcripts distincts tout en conservant Argon2id, XChaCha20-Poly1305 et l'autorité Ed25519 OWNER. Les APIs génériques créent/importent explicitement en V2 et auto-détectent V1/V2 à la lecture, tandis que les variantes `_v1`/`_v2` imposent un format exact et que `DEFAULT_WALLET_FORMAT` reste indépendant de `LATEST_SUPPORTED_WALLET_FORMAT`. La migration V1 -> V2 est explicite, OWNER-authentifiée, no-clobber ou atomique in-place avec protection stale-state ; aucune ouverture ne migre silencieusement. La release ferme également le runtime Tauri distribué : les documents Config/schemas sont embarqués comme resources, `ksp-config-lib` prépare une racine KSP user-writable commune sans écraser les Config utilisateur ni embarquer `.env`, et les bundles Linux `.deb`, `.rpm` et `.AppImage` ont été produits avec succès après le gate final `pre.018-fix.001`. Le prompt `prompts/012-V0_2_7_START_PROMPT.md` ouvre `0.2.7 — WebSocket Solana standard` par lectures, audit officiel, threat-model et sizing avant implémentation lourde.
## 0.2.5 — Wallet foundation — 2026-08-20 ## 0.2.5 — Wallet foundation — 2026-08-20
`0.2.5` publie `ksp-wallet-lib` et le format natif interopérable `.kspwallet` V1. La release stabilise les capacités cryptographiquement indépendantes VIEW/OWNER, le masquage de la Pubkey/alias/notes à létat verrouillé, Argon2id v19 avec paramètres sérialisés et profil de création `65 536 KiB / 3 / 1`, XChaCha20-Poly1305, une autorité Ed25519 OWNER distincte de la keypair Solana, les compartiments `owner_control`/`metadata`/`secret`, la création et louverture mémoire/fichier, la persistence no-clobber, la signature Solana OWNER sans getter secret, ladministration alias/notes, les rotations OWNER/VIEW, la révocation forte VIEW avec rekey metadata, la détection de handles stale et les adapters Solana CLI JSON/Base58 pour inspection/import/export. Le wire V1 est documenté indépendamment de Rust dans `docs/formats/KSPWALLET_V1.md` et couvert par des vecteurs publics ainsi que des canaris adversariaux et une reproduction externe. La release conserve Wallet indépendant de Config/Transport/ExecutionPolicy/Store/Tauri et expose la Pubkey via `ksp-core-lib` tandis que `solana-keypair` reste encapsulée dans Wallet. `0.2.5` publie `ksp-wallet-lib` et le format natif interopérable `.kspwallet` V1. La release stabilise les capacités cryptographiquement indépendantes VIEW/OWNER, le masquage de la Pubkey/alias/notes à létat verrouillé, Argon2id v19 avec paramètres sérialisés et profil de création `65 536 KiB / 3 / 1`, XChaCha20-Poly1305, une autorité Ed25519 OWNER distincte de la keypair Solana, les compartiments `owner_control`/`metadata`/`secret`, la création et louverture mémoire/fichier, la persistence no-clobber, la signature Solana OWNER sans getter secret, ladministration alias/notes, les rotations OWNER/VIEW, la révocation forte VIEW avec rekey metadata, la détection de handles stale et les adapters Solana CLI JSON/Base58 pour inspection/import/export. Le wire V1 est documenté indépendamment de Rust dans `docs/formats/KSPWALLET_V1.md` et couvert par des vecteurs publics ainsi que des canaris adversariaux et une reproduction externe. La release conserve Wallet indépendant de Config/Transport/ExecutionPolicy/Store/Tauri et expose la Pubkey via `ksp-core-lib` tandis que `solana-keypair` reste encapsulée dans Wallet.
@@ -13,8 +21,6 @@ La clôture technique `pre.010-fix.001` à `fix.003` met la dépendance directe
`0.2.4` achève la surface HTTP Solana standard de `ksp-onchain-transport-lib` : les 10 wrappers Blocks et 5 wrappers Economics portent la couverture typée à **52/52 méthodes HTTP courantes**, tandis que les **14/14 méthodes historiques Deprecated/runtime Removed** restent conservées pour compliance. La release stabilise notamment `getBlock` moderne avec sa forme bare encoding legacy dépréciée, les quatre variantes `transactionDetails`, les versions transaction numériques génériques, `numRewardPartitions` (SIMD-0118), `commissionBps` (SIMD-0291), les overloads de ranges/performance, `getBlockProduction`, les valeurs Economics fournies par le runtime et `getInflationReward` positionnel sans plafond d'adresses inventé. Le réaudit final confirme l'égalité exacte entre l'inventaire HTTP officiel courant et le registre KSP, applique `KSP-TRANSPORT-007` aux **52/52 wrappers**, et ne matérialise aucune extension spéculative issue de la watchlist SIMD. Les canaries de frontières, le workspace complet et les deux smokes Devnet — Transport pur couvrant Accounts/Tokens/Cluster/Transactions/Blocks/Economics et composition Config -> Transport transitoire — sont validés avant publication. Le prompt `prompts/010-V0_2_5_START_PROMPT.md`, enrichi par `pre.009-fix.001`, ouvre `0.2.5 — Wallet foundation` avec threat model, interopérabilité `.kspwallet` et capacités indépendantes VIEW/OWNER. `0.2.4` achève la surface HTTP Solana standard de `ksp-onchain-transport-lib` : les 10 wrappers Blocks et 5 wrappers Economics portent la couverture typée à **52/52 méthodes HTTP courantes**, tandis que les **14/14 méthodes historiques Deprecated/runtime Removed** restent conservées pour compliance. La release stabilise notamment `getBlock` moderne avec sa forme bare encoding legacy dépréciée, les quatre variantes `transactionDetails`, les versions transaction numériques génériques, `numRewardPartitions` (SIMD-0118), `commissionBps` (SIMD-0291), les overloads de ranges/performance, `getBlockProduction`, les valeurs Economics fournies par le runtime et `getInflationReward` positionnel sans plafond d'adresses inventé. Le réaudit final confirme l'égalité exacte entre l'inventaire HTTP officiel courant et le registre KSP, applique `KSP-TRANSPORT-007` aux **52/52 wrappers**, et ne matérialise aucune extension spéculative issue de la watchlist SIMD. Les canaries de frontières, le workspace complet et les deux smokes Devnet — Transport pur couvrant Accounts/Tokens/Cluster/Transactions/Blocks/Economics et composition Config -> Transport transitoire — sont validés avant publication. Le prompt `prompts/010-V0_2_5_START_PROMPT.md`, enrichi par `pre.009-fix.001`, ouvre `0.2.5 — Wallet foundation` avec threat model, interopérabilité `.kspwallet` et capacités indépendantes VIEW/OWNER.
Ce changelog résume uniquement les releases KSP considérées comme stables, dans l'ordre chronologique décroissant. Les détails de chaque livraison restent dans `deltas/`.
## 0.2.3 — HTTP Transactions — 2026-08-18 ## 0.2.3 — HTTP Transactions — 2026-08-18
`0.2.3` complète la famille HTTP Transactions de `ksp-onchain-transport-lib` avec 11 wrappers typés, portant la surface HTTP typée courante à 37 méthodes : 4 foundation, 22 Accounts/Tokens/Cluster et 11 Transactions. La release stabilise la classification exacte `8 Read / RetrySafe`, `2 WriteSubmission / NeverAfterDispatch` (`requestAirdrop`, `sendTransaction`) et `1 Simulation / RetrySafe` (`simulateTransaction`), avec preuves end-to-end qu'une write submission n'est jamais resoumise après dispatch ambigu mais peut retenter lorsqu'un échec est prouvé `NotDispatched`. `getTransaction` couvre la config moderne complète et la forme bare encoding legacy dépréciée ; les variantes de transaction, metadata, version et `transactionIndex` restent préservées losslessly. `simulateTransaction` couvre sa config complète, ses invariants déterministes et son résultat riche sans introduire de client RPC Solana haut niveau ni de décodage transactionnel dans Transport. La release formalise `KSP-TRANSPORT-007` et réaudite rétroactivement les 37 wrappers courants sans remédiation fonctionnelle. Les canaries conservent 52 méthodes HTTP courantes, 14 historiques Deprecated/Removed et 15 Blocks/Economics réservées à `0.2.4`. Les graphes Cargo et les deux smokes Devnet — Transport pur read-only et composition Config -> Transport transitoire — ont été validés avant publication. Le prompt `prompts/009-V0_2_4_START_PROMPT.md` ouvre `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale`. `0.2.3` complète la famille HTTP Transactions de `ksp-onchain-transport-lib` avec 11 wrappers typés, portant la surface HTTP typée courante à 37 méthodes : 4 foundation, 22 Accounts/Tokens/Cluster et 11 Transactions. La release stabilise la classification exacte `8 Read / RetrySafe`, `2 WriteSubmission / NeverAfterDispatch` (`requestAirdrop`, `sendTransaction`) et `1 Simulation / RetrySafe` (`simulateTransaction`), avec preuves end-to-end qu'une write submission n'est jamais resoumise après dispatch ambigu mais peut retenter lorsqu'un échec est prouvé `NotDispatched`. `getTransaction` couvre la config moderne complète et la forme bare encoding legacy dépréciée ; les variantes de transaction, metadata, version et `transactionIndex` restent préservées losslessly. `simulateTransaction` couvre sa config complète, ses invariants déterministes et son résultat riche sans introduire de client RPC Solana haut niveau ni de décodage transactionnel dans Transport. La release formalise `KSP-TRANSPORT-007` et réaudite rétroactivement les 37 wrappers courants sans remédiation fonctionnelle. Les canaries conservent 52 méthodes HTTP courantes, 14 historiques Deprecated/Removed et 15 Blocks/Economics réservées à `0.2.4`. Les graphes Cargo et les deux smokes Devnet — Transport pur read-only et composition Config -> Transport transitoire — ont été validés avant publication. Le prompt `prompts/009-V0_2_4_START_PROMPT.md` ouvre `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale`.

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml # file: Cargo.toml
# version: 190 # version: 191
[workspace] [workspace]
resolver = "3" resolver = "3"
members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"] members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"]
[workspace.package] [workspace.package]
version = "0.2.6-pre.18.fix.1" version = "0.2.6"
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: ROADMAP.md --> <!-- file: ROADMAP.md -->
<!-- version: 79 --> <!-- version: 80 -->
# Roadmap KSP # Roadmap KSP
@@ -50,7 +50,7 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U
- [X] `0.2.3` — HTTP Transactions stable : 11/11 wrappers typés publiés, classification `8 Read / 2 WriteSubmission / 1 Simulation`, no-resend ambigu prouvé pour les write submissions, `KSP-TRANSPORT-007` réaudité conforme sur les 37 wrappers HTTP courants, graphes Cargo et deux smokes Devnet validés ; `0.2.4` reprend les 15 Blocks/Economics restants. - [X] `0.2.3` — HTTP Transactions stable : 11/11 wrappers typés publiés, classification `8 Read / 2 WriteSubmission / 1 Simulation`, no-resend ambigu prouvé pour les write submissions, `KSP-TRANSPORT-007` réaudité conforme sur les 37 wrappers HTTP courants, graphes Cargo et deux smokes Devnet validés ; `0.2.4` reprend les 15 Blocks/Economics restants.
- [X] `0.2.4` — HTTP Blocks + Economics stable : 15/15 wrappers `V0_2_4` publiés, surface typed complète à 52/52 méthodes courantes, 14/14 historiques conservées, réaudit SIMD/inventaire final et `KSP-TRANSPORT-007` global validés ; deux smokes Devnet passés avant publication. - [X] `0.2.4` — HTTP Blocks + Economics stable : 15/15 wrappers `V0_2_4` publiés, surface typed complète à 52/52 méthodes courantes, 14/14 historiques conservées, réaudit SIMD/inventaire final et `KSP-TRANSPORT-007` global validés ; deux smokes Devnet passés avant publication.
- [X] `0.2.5` — Wallet foundation stable : `.kspwallet` V1, VIEW/OWNER indépendants, Argon2id/XChaCha20-Poly1305, autorité Ed25519 OWNER, persistence no-clobber, signature, administration/rotations/révocation VIEW forte, import/export Solana CLI JSON + Base58, canaris adversariaux, interop externe et documentation durable publiés. La clôture `pre.010-fix.001``fix.003` ajoute `ed25519-dalek 3.0.0` direct, normalise le Rust workspace et installe laudit structurel Python complémentaire à rustfmt/Clippy. `Pubkey` reste via `ksp-core-lib`, la keypair reste encapsulée dans Wallet et Config/Transport/ExecutionPolicy/Store/Tauri restent hors Wallet. - [X] `0.2.5` — Wallet foundation stable : `.kspwallet` V1, VIEW/OWNER indépendants, Argon2id/XChaCha20-Poly1305, autorité Ed25519 OWNER, persistence no-clobber, signature, administration/rotations/révocation VIEW forte, import/export Solana CLI JSON + Base58, canaris adversariaux, interop externe et documentation durable publiés. La clôture `pre.010-fix.001``fix.003` ajoute `ed25519-dalek 3.0.0` direct, normalise le Rust workspace et installe laudit structurel Python complémentaire à rustfmt/Clippy. `Pubkey` reste via `ksp-core-lib`, la keypair reste encapsulée dans Wallet et Config/Transport/ExecutionPolicy/Store/Tauri restent hors Wallet.
- [/] `0.2.6``ksp-app-wallet-desk` + évolution `.kspwallet` V2 : surface Desk, wire V2, APIs multi-version et migration explicite acquis ; `pre.018` matérialise la candidate documentaire et le runtime Tauri packagé user-writable. Gate opérateur/build final puis `rel.001` restent à fermer. Plan détaillé : `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`. - [X] `0.2.6``ksp-app-wallet-desk` + `.kspwallet` V2 stables : composition Config/Wallet/HTTP/Logging, lifecycle VIEW/OWNER, balance, administration/import/export, wire binaire V2, APIs multi-version, migration V1 -> V2 explicite et runtime Tauri packagé user-writable validés ; bundles Linux `.deb`/`.rpm`/`.AppImage` produits avant publication. Plan clôturé : `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`.
- [ ] `0.2.7` — Étendre `ksp-onchain-transport-lib` au WebSocket Solana standard complet ; permettre plusieurs sessions sur une même URL sans imposer encore un pool automatique complexe. - [ ] `0.2.7` — Étendre `ksp-onchain-transport-lib` au WebSocket Solana standard complet ; permettre plusieurs sessions sur une même URL sans imposer encore un pool automatique complexe.
- [ ] `0.2.8` — Ajouter Helius LaserStream WebSocket comme extension du moteur WebSocket standard, sans duplication de client. - [ ] `0.2.8` — Ajouter Helius LaserStream WebSocket comme extension du moteur WebSocket standard, sans duplication de client.
- [ ] `0.2.9` — Ajouter une première fondation Yellowstone gRPC standard/provider-neutral ; dimensionner la surface exacte à `pre.001` selon la documentation normative actuelle. - [ ] `0.2.9` — Ajouter une première fondation Yellowstone gRPC standard/provider-neutral ; dimensionner la surface exacte à `pre.001` selon la documentation normative actuelle.

View File

@@ -1,7 +1,7 @@
{ {
"name": "ksp-app-config-desk", "name": "ksp-app-config-desk",
"private": true, "private": true,
"version": "0.2.6-pre.18.fix.1", "version": "0.2.6",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "KSP Config Desk", "productName": "KSP Config Desk",
"version": "0.2.6-pre.18.fix.1", "version": "0.2.6",
"identifier": "com.sasedev.ksp-app-config-desk", "identifier": "com.sasedev.ksp-app-config-desk",
"build": { "build": {
"beforeDevCommand": { "beforeDevCommand": {

View File

@@ -1,9 +1,9 @@
<!-- file: crates/ksp-app-wallet-desk/README.md --> <!-- file: crates/ksp-app-wallet-desk/README.md -->
<!-- version: 1 --> <!-- version: 2 -->
# `ksp-app-wallet-desk` # `ksp-app-wallet-desk`
`ksp-app-wallet-desk` est l'application desktop spécialisée d'administration et de validation des wallets KSP. `ksp-app-wallet-desk` est l'application desktop spécialisée stable d'administration et de validation des wallets KSP depuis KSP `0.2.6`.
La crate est un package Tauri mixte : La crate est un package Tauri mixte :
@@ -131,6 +131,6 @@ Le build production de la release est exécuté seulement après tous les autres
(cd crates/ksp-app-wallet-desk && cargo tauri build) (cd crates/ksp-app-wallet-desk && cargo tauri build)
``` ```
Cette commande doit rester l'absolue dernière opération de validation de la candidate `0.2.6`. Cette commande reste l'absolue dernière opération de validation lorsqu'une publication Wallet Desk est candidate au tag stable.
Voir également [`USAGE.md`](USAGE.md), [`../../docs/formats/KSPWALLET_V1.md`](../../docs/formats/KSPWALLET_V1.md), [`../../docs/formats/KSPWALLET_V2.md`](../../docs/formats/KSPWALLET_V2.md) et [`../../docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](../../docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md). Voir également [`USAGE.md`](USAGE.md), [`../../docs/formats/KSPWALLET_V1.md`](../../docs/formats/KSPWALLET_V1.md), [`../../docs/formats/KSPWALLET_V2.md`](../../docs/formats/KSPWALLET_V2.md) et [`../../docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](../../docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md).

View File

@@ -1,5 +1,5 @@
<!-- file: crates/ksp-app-wallet-desk/USAGE.md --> <!-- file: crates/ksp-app-wallet-desk/USAGE.md -->
<!-- version: 1 --> <!-- version: 2 -->
# Utilisation de `ksp-app-wallet-desk` # Utilisation de `ksp-app-wallet-desk`
@@ -14,8 +14,8 @@ Depuis la racine du workspace :
Pour isoler les wallets d'un parcours manuel : Pour isoler les wallets d'un parcours manuel :
```bash ```bash
KSP_WALLETS_DIRECTORY=var/wallet-desk-manual \ (cd crates/ksp-app-wallet-desk && \
bash -lc 'cd crates/ksp-app-wallet-desk && cargo tauri dev' KSP_WALLETS_DIRECTORY=var/wallet-desk-manual cargo tauri dev)
``` ```
Le processus Rust debug recale son current working directory sur la racine du workspace avant le bootstrap Config. `KSP_WALLETS_DIRECTORY`, les autres variables KSP et le `.env` restent résolus exclusivement par `ksp-config-lib`. Le processus Rust debug recale son current working directory sur la racine du workspace avant le bootstrap Config. `KSP_WALLETS_DIRECTORY`, les autres variables KSP et le `.env` restent résolus exclusivement par `ksp-config-lib`.
@@ -107,7 +107,7 @@ Le chemin physique exact dépend de la plateforme et est résolu par `ProjectDir
Les Config existantes sont conservées lors d'une mise à jour. Les schemas sont synchronisés depuis le package courant. Le `.env` et les secrets ne sont jamais embarqués dans le bundle. Les Config existantes sont conservées lors d'une mise à jour. Les schemas sont synchronisés depuis le package courant. Le `.env` et les secrets ne sont jamais embarqués dans le bundle.
## 9. Validation candidate `0.2.6` ## 9. Validation de publication
Avant le build : Avant le build :
@@ -137,4 +137,4 @@ L'absolue dernière opération est :
(cd crates/ksp-app-wallet-desk && cargo tauri build) (cd crates/ksp-app-wallet-desk && cargo tauri build)
``` ```
Aucune commande de validation ne doit être exécutée après ce build pour conserver la preuve d'ordre de la candidate. Aucune commande de validation ne doit être exécutée après ce build avant la décision de publication/tag, afin de conserver la preuve d'ordre du gate.

View File

@@ -1,5 +1,5 @@
<!-- file: crates/ksp-app-wallet-desk/frontend/main.html --> <!-- file: crates/ksp-app-wallet-desk/frontend/main.html -->
<!-- version: 4 --> <!-- version: 5 -->
<!DOCTYPE html> <!DOCTYPE html>
<html lang="fr"> <html lang="fr">
<head> <head>
@@ -53,7 +53,7 @@
<h1 id="viewTitle" class="h3 mb-1">Dashboard</h1> <h1 id="viewTitle" class="h3 mb-1">Dashboard</h1>
<p class="text-body-secondary mb-0">Identité autorisée et balance SOL via le Transport HTTP composite sont actives.</p> <p class="text-body-secondary mb-0">Identité autorisée et balance SOL via le Transport HTTP composite sont actives.</p>
</div> </div>
<span class="badge text-bg-secondary">0.2.6-pre.18.fix.1</span> <span class="badge text-bg-secondary">0.2.6</span>
</div> </div>
<section data-view-panel="dashboard"> <section data-view-panel="dashboard">
<div class="row g-3"> <div class="row g-3">

View File

@@ -1,7 +1,7 @@
{ {
"name": "ksp-app-wallet-desk", "name": "ksp-app-wallet-desk",
"private": true, "private": true,
"version": "0.2.6-pre.18.fix.1", "version": "0.2.6",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "KSP Wallet Desk", "productName": "KSP Wallet Desk",
"version": "0.2.6-pre.18.fix.1", "version": "0.2.6",
"identifier": "com.sasedev.ksp-app-wallet-desk", "identifier": "com.sasedev.ksp-app-wallet-desk",
"build": { "build": {
"beforeDevCommand": { "beforeDevCommand": {

View File

@@ -1,5 +1,5 @@
<!-- file: crates/ksp-config-lib/TODO.md --> <!-- file: crates/ksp-config-lib/TODO.md -->
<!-- version: 5 --> <!-- version: 6 -->
# TODO ksp-config-lib # TODO ksp-config-lib
@@ -41,7 +41,9 @@ Ces points ne nécessitent pas de duplication de logique dans `ksp-config-lib`;
Le même delta ajoute les entrées `resolve_*_config_profile` nécessaires pour mapper un profil Logging/Wallet déjà sélectionné par un composite sans perdre sa provenance `Composite`. La préparation filesystem du répertoire effectif appartient à `ksp-app-wallet-desk`. Le même delta ajoute les entrées `resolve_*_config_profile` nécessaires pour mapper un profil Logging/Wallet déjà sélectionné par un composite sans perdre sa provenance `Composite`. La préparation filesystem du répertoire effectif appartient à `ksp-app-wallet-desk`.
Les futurs passwords `KSP_SECRET_WALLET_PASS_*` restent hors du JSON `std.wallet` et seront introduits dans la tranche dunlock dédiée ; Config restera leur propriétaire process/`.env`. Les passwords `KSP_SECRET_WALLET_PASS_*` restent hors du JSON `std.wallet` et sont désormais consommés par Wallet Desk comme candidats explicitement sélectionnés ; Config reste leur propriétaire process/`.env` et ne projette jamais leur valeur vers le frontend.
`0.2.6-pre.018` ajoute également le contrat de runtime packagé : Config prépare une racine KSP user-writable à partir des resources Tauri, seed les documents Config uniquement lorsqu'ils sont absents, resynchronise les schemas et n'embarque jamais `.env`. Cette capacité reste possédée par Config et partagée par les applications desk.
## Futur, uniquement au besoin ## Futur, uniquement au besoin

View File

@@ -1,11 +1,11 @@
<!-- file: crates/ksp-wallet-lib/README.md --> <!-- file: crates/ksp-wallet-lib/README.md -->
<!-- version: 4 --> <!-- version: 5 -->
# `ksp-wallet-lib` # `ksp-wallet-lib`
Statut : **stable depuis KSP `0.2.5`**. Statut : **stable depuis KSP `0.2.5` ; surface V2/multi-version stable depuis `0.2.6`**.
`ksp-wallet-lib` est la bibliothèque KSP propriétaire du Wallet Solana natif. Elle possède le format autonome `.kspwallet` V1 et le format binaire V2 canonique, les capacités indépendantes VIEW/OWNER, la protection du secret Solana, la signature, l'administration des metadata, les rotations de credentials, la persistence native et les adapters d'import/export explicitement supportés. Depuis `0.2.6-pre.016`, les APIs non versionnées créent/importent en V2 par default explicite et lisent V1/V2 par détection bornée. `0.2.6-pre.017` ajoute la migration V1 -> V2 explicite et OWNER-authentifiée, sans migration à l'ouverture. `ksp-wallet-lib` est la bibliothèque KSP propriétaire du Wallet Solana natif. Elle possède le format autonome `.kspwallet` V1 et le format binaire V2 canonique, les capacités indépendantes VIEW/OWNER, la protection du secret Solana, la signature, l'administration des metadata, les rotations de credentials, la persistence native et les adapters d'import/export explicitement supportés. Depuis KSP `0.2.6`, les APIs non versionnées créent/importent en V2 par default explicite et lisent V1/V2 par détection bornée. La migration V1 -> V2 est explicite et OWNER-authentifiée, sans migration à l'ouverture.
La crate est volontairement indépendante de Config, du réseau et de Tauri. Un consumer fournit les chemins, passwords et metadata ; Wallet ouvre, protège, signe et persiste sans décider d'une policy de dépense ni contacter un RPC. La crate est volontairement indépendante de Config, du réseau et de Tauri. Un consumer fournit les chemins, passwords et metadata ; Wallet ouvre, protège, signe et persiste sans décider d'une policy de dépense ni contacter un RPC.
@@ -83,7 +83,7 @@ La Pubkey publique est toujours `ksp_core_lib::Pubkey`. `solana-keypair` reste u
### Verrouillé ### Verrouillé
Sans password, `inspect_locked_wallet_v1` et `inspect_locked_wallet_file_v1` exposent uniquement : Sans password, les APIs génériques `inspect_locked_wallet` / `inspect_locked_wallet_file` auto-détectent V1/V2 et exposent uniquement les mêmes champs sûrs. Les variantes `_v1` / `_v2` restent disponibles lorsquun caller veut imposer exactement le format attendu :
```text ```text
format_version format_version
@@ -195,7 +195,7 @@ Elles couvrent le wire, Argon2id/XChaCha20-Poly1305, l'ouverture VIEW/OWNER, la
- [`../../docs/validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](../../docs/validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) — matrice de sécurité/interoperabilité/compliance ; - [`../../docs/validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](../../docs/validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) — matrice de sécurité/interoperabilité/compliance ;
- [`../../prompts/011-V0_2_6_START_PROMPT.md`](../../prompts/011-V0_2_6_START_PROMPT.md) — reprise vers Wallet Desk après publication stable de `0.2.5`. - [`../../prompts/011-V0_2_6_START_PROMPT.md`](../../prompts/011-V0_2_6_START_PROMPT.md) — reprise vers Wallet Desk après publication stable de `0.2.5`.
## V2 en `0.2.6-pre.015` / `pre.016` / `pre.017` ## V2 stable depuis `0.2.6`
`pre.015` a figé le wire structurel V2, son codec et ses transcripts/AAD. `pre.016` matérialise le runtime V2 complet et la façade multi-version : `pre.015` a figé le wire structurel V2, son codec et ses transcripts/AAD. `pre.016` matérialise le runtime V2 complet et la façade multi-version :

View File

@@ -1,5 +1,5 @@
<!-- file: crates/ksp-wallet-lib/USAGE.md --> <!-- file: crates/ksp-wallet-lib/USAGE.md -->
<!-- version: 4 --> <!-- version: 5 -->
# Utilisation de `ksp-wallet-lib` # Utilisation de `ksp-wallet-lib`
@@ -280,7 +280,7 @@ ksp-onchain-transport-lib
Cette composition est le rôle de `0.2.6 — ksp-app-wallet-desk`, pas de `ksp-wallet-lib`. Cette composition est le rôle de `0.2.6 — ksp-app-wallet-desk`, pas de `ksp-wallet-lib`.
## Wire/runtime V2 (`0.2.6-pre.015` / `pre.016` / `pre.017`) ## Wire/runtime V2 stable (`0.2.6`)
Le codec structurel V2 reste disponible directement pour les outils qui travaillent explicitement au niveau wire : Le codec structurel V2 reste disponible directement pour les outils qui travaillent explicitement au niveau wire :

117
deltas/0.2.6/rel.001.md Normal file
View File

@@ -0,0 +1,117 @@
<!-- file: deltas/0.2.6/rel.001.md -->
<!-- version: 1 -->
# Delta `0.2.6-rel.001` — publication stable Wallet Desk + `.kspwallet` V2
## 1. Base requise
Cette release stable s'applique après :
```text
0.2.6-pre.018-fix.001 signal technique 0.2.6-pre.18.fix.1
0.2.6-pre.018-fix.002 correctif documentaire uniquement, sans bump Cargo
```
Le commit attendu pour cette tranche est :
```text
v0.2.6-rel.001
```
Le tag stable attendu après validation est :
```text
v0.2.6
```
## 2. Preuve candidate acquise
Le checkpoint opérateur final du 22 août 2026 après `pre.018-fix.001` est vert : `cargo fmt`, audit Python, `cargo check --workspace`, Clippy, tests ciblés Config/Wallet/Desks et `cargo test --workspace` passent. Le build Wallet Desk exécuté en dernière opération a produit avec succès les bundles Linux `.deb`, `.rpm` et `.AppImage` en `0.2.6-pre.18.fix.1`.
`pre.018-fix.002` n'a modifié que le prompt de reprise `0.2.7` et son index/delta ; il n'a donc pas invalidé cette preuve technique.
## 3. Publication stable
`rel.001` n'ajoute aucune fonctionnalité runtime. Elle :
- passe `workspace.package.version` à `0.2.6` ;
- aligne les versions npm et Tauri des deux Desks sur `0.2.6` ;
- aligne le badge Wallet Desk sur la version stable ;
- ajoute l'entrée stable `0.2.6` au `CHANGELOG.md` ;
- clôt `ROADMAP.md`, le plan détaillé Wallet Desk et la matrice de compliance ;
- conserve `.kspwallet` V1 comme format historique stable lisible et V2 comme format binaire stable/default ;
- conserve les APIs génériques de lecture multi-version, les APIs explicites V1/V2 et la migration V1 -> V2 OWNER-authentifiée ;
- conserve le runtime packagé Config/resources et la racine KSP user-writable ;
- désigne `prompts/012-V0_2_7_START_PROMPT.md` comme contrat de reprise pour `0.2.7-pre.001`.
## 4. Audit Markdown final
La clôture a relu les 318 fichiers Markdown du dépôt. Les journaux `deltas/<version>/...` historiques n'ont pas été réécrits pour refléter le présent : ils restent des preuves temporelles. Les documents actifs ont été normalisés/corrigés lorsque nécessaire.
Corrections principales :
- statuts `0.2.6`/Wallet Desk/V2 passés à stable/clôturé ;
- matrice `009` fermée avec la preuve réelle `pre.018-fix.001` ;
- suppression des formulations disant que le build `pre.018` reste à faire ;
- `KSPWALLET_V1.md` synchronisé avec l'auto-détection V1/V2 désormais implémentée ;
- TODO prix Wallet Desk corrigé de `0.2.12` vers la release canonique `0.2.11` ;
- commandes Tauri actives normalisées en invocation crate-local, sans `bash -lc` ;
- statuts composants normalisés sur le vocabulaire de l'inventaire ;
- TODO Config secrets Wallet mis à jour comme acquis ;
- documents d'architecture/plan volumineux normalisés à un H1 unique ;
- espace terminal résiduel supprimé et liens Markdown relatifs revérifiés ;
- prompt `0.2.6` marqué comme consommé et prompt `0.2.7` désigné comme prochain contrat actif.
## 5. Surface stable `0.2.6`
La release publie notamment :
```text
ksp-app-wallet-desk
Config + Wallet + HTTP Transport + Logging
inventory/create/import/unlock VIEW/OWNER
getBalance Devnet/HTTP via Transport
alias/notes + rotations OWNER/VIEW + disable/recreate VIEW
export OWNER Solana CLI JSON/Base58
.kspwallet V1 stable/historique lisible
.kspwallet V2 binaire stable et default de création/import
lecture générique V1/V2 auto-détectée
APIs versionnées strictes V1/V2
migration explicite OWNER-authentifiée V1 -> V2
runtime Tauri packagé avec Config/schemas et racine KSP user-writable
```
## 6. Validation stable à exécuter après application
Le changement de version stable doit être validé à nouveau :
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-config-lib
cargo test -p ksp-wallet-lib
cargo test -p ksp-app-config-desk
cargo test -p ksp-app-wallet-desk
cargo test --workspace
```
Tout parcours manuel ou smoke live retenu doit être exécuté avant le build. Le build stable Wallet Desk reste l'**absolue dernière opération de validation** :
```bash
(cd crates/ksp-app-wallet-desk && cargo tauri build)
```
Aucune commande de check/test/build ne doit être exécutée après ce build avant la décision de commit/tag. Les bundles attendus portent la version stable `0.2.6`.
## 7. Clôture Git
Si le gate stable est vert :
```text
commit : v0.2.6-rel.001
tag : v0.2.6
```
La prochaine release active est `0.2.7 — WebSocket Solana standard`, ouverte par `0.2.7-pre.001` en suivant `prompts/012-V0_2_7_START_PROMPT.md`.

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
<!-- file: docs/IDEAS.md --> <!-- file: docs/IDEAS.md -->
<!-- version: 23 --> <!-- version: 24 -->
# Idées à explorer # Idées à explorer
@@ -204,9 +204,9 @@ Chaque format doit être étudié côté sécurité, round-trip, secret/public,
### `.kspwallet` V2 binaire et formats futurs ### `.kspwallet` V2 binaire et formats futurs
**Status :** V2 retenu et matérialisé en `0.2.6-pre.015` / facteurs futurs à explorer **Status :** Transférée vers une décision/règle pour V2 stable en `0.2.6` / facteurs futurs à explorer
Le JSON V1 actuel reste le format historique stable et lisible. Base64 seul napporte aucune sécurité et resterait un texte trivialement décodable avec environ un tiers de surcharge. La décision initialement envisagée pour `0.2.7` a été ramenée dans `0.2.6` : `pre.015` définit un **wire binaire V2 KSP** avec magic/framing explicite, entiers big-endian, identifiants numériques stables, longueurs bornées et lecture/écriture canonique stricte. V1 reste supporté sans réinterprétation ; la façade de lecture multi-version, la création/persistence V2, les APIs `_v1/_v2` et la politique `DEFAULT_WALLET_FORMAT = V2` sont matérialisées en `pre.016`, puis la migration explicite OWNER-authentifiée V1 -> V2 est matérialisée en `pre.017`. Le V2 ne modifie pas à lui seul les garanties cryptographiques de VIEW/OWNER, keypair ou import/export. Le JSON V1 reste le format historique stable et lisible. Base64 seul napporte aucune sécurité et resterait un texte trivialement décodable avec environ un tiers de surcharge. La décision initialement envisagée pour `0.2.7` a été ramenée dans `0.2.6` : `pre.015` définit un **wire binaire V2 KSP** avec magic/framing explicite, entiers big-endian, identifiants numériques stables, longueurs bornées et lecture/écriture canonique stricte. V1 reste supporté sans réinterprétation ; la façade de lecture multi-version, la création/persistence V2, les APIs `_v1/_v2` et la politique `DEFAULT_WALLET_FORMAT = V2` sont matérialisées en `pre.016`, puis la migration explicite OWNER-authentifiée V1 -> V2 est matérialisée en `pre.017`. Le V2 ne modifie pas à lui seul les garanties cryptographiques de VIEW/OWNER, keypair ou import/export.
V2 est désormais réservé au wire binaire KSP sans second facteur. Un futur V3 pourra introduire dautres modèles dautorisation, notamment password + facteur supplémentaire. `ksp-wallet-lib` restera propriétaire du format, des challenges et de la vérification, mais toute interaction réelle (OTP, enrollment/recovery, hardware/WebAuthn, validation distante) exigera une évolution de Wallet Desk ou du client concerné. Un seed TOTP stocké uniquement dans le même fichier que le wallet ne doit pas être présenté automatiquement comme un second facteur indépendant contre un attaquant possédant ce fichier. V2 est désormais réservé au wire binaire KSP sans second facteur. Un futur V3 pourra introduire dautres modèles dautorisation, notamment password + facteur supplémentaire. `ksp-wallet-lib` restera propriétaire du format, des challenges et de la vérification, mais toute interaction réelle (OTP, enrollment/recovery, hardware/WebAuthn, validation distante) exigera une évolution de Wallet Desk ou du client concerné. Un seed TOTP stocké uniquement dans le même fichier que le wallet ne doit pas être présenté automatiquement comme un second facteur indépendant contre un attaquant possédant ce fichier.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/004-COMPONENT_INVENTORY.md --> <!-- file: docs/architecture/004-COMPONENT_INVENTORY.md -->
<!-- version: 18 --> <!-- version: 19 -->
# Inventaire initial des composants KSP # Inventaire initial des composants KSP
@@ -17,42 +17,42 @@ Ce document maintient l'inventaire synthétique des composants retenus ou presse
## Inventaire synthétique ## Inventaire synthétique
| Domaine | Composant | Type | Statut | Première cible actuelle | Mission | | Domaine | Composant | Type | Statut | Première cible actuelle | Mission |
|-------------------------|------------------------------------------|--------------------|--------------|---------------------------------|--------------------------------------------------------------| |-------------------------|------------------------------------------|--------------------|--------------|---------------------------------|----------------------------------------------------------------|
| Core | `ksp-core-lib` | lib | Stable | `0.1.1` | Error/Result, Program IDs et primitives fondamentales | | Core | `ksp-core-lib` | lib | Stable | `0.1.1` | Error/Result, Program IDs et primitives fondamentales |
| Logging | `ksp-logging-lib` | lib | Stable | `0.1.2` | façade unique tracing KSP | | Logging | `ksp-logging-lib` | lib | Stable | `0.1.2` | façade unique tracing KSP |
| Config | `ksp-config-lib` | lib | Stable | `0.1.3` | documents, profils, env et persistence Config | | Config | `ksp-config-lib` | lib | Stable | `0.1.3` | documents, profils, env et persistence Config |
| Config Desk | `ksp-app-config-desk` | app | Stable | `0.1.4` | validation/management Config | | Config Desk | `ksp-app-config-desk` | app | Stable | `0.1.4` | validation/management Config |
| On-chain HTTP | `ksp-onchain-transport-lib` | lib | Stable | `0.2.1``0.2.4` | HTTP standard complet : 52/52 current + 14/14 historical | | On-chain HTTP | `ksp-onchain-transport-lib` | lib | Stable | `0.2.1``0.2.4` | HTTP standard complet : 52/52 current + 14/14 historical |
| Wallet | `ksp-wallet-lib` | lib | Stable | `0.2.5` | `.kspwallet`, VIEW/OWNER, secrets, signature, import/export | | Wallet | `ksp-wallet-lib` | lib | Stable | `0.2.5` | `.kspwallet`, VIEW/OWNER, secrets, signature, import/export |
| Wallet Desk | `ksp-app-wallet-desk` | app | Retenu | `0.2.6` | Wallet + Config composite + HTTP/balance | | Wallet Desk | `ksp-app-wallet-desk` | app | Stable | `0.2.6` | Wallet + Config composite + HTTP/balance |
| Wallet V2 | `ksp-wallet-lib` | lib | En cours | `0.2.6` | wire/runtime V2 + API default/versionnée ; migration pre.017 | | Wallet V2 | `ksp-wallet-lib` | lib | Stable | `0.2.6` | wire/runtime V2 + API default/versionnée + migration explicite |
| Standard WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.7` | WebSocket Solana complet, sessions/subscriptions | | Standard WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.7` | WebSocket Solana complet, sessions/subscriptions |
| Helius WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.8` | LaserStream WebSocket comme extension du moteur standard | | Helius WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.8` | LaserStream WebSocket comme extension du moteur standard |
| Yellowstone | `ksp-onchain-transport-lib` | lib | Pressenti | `0.2.9` | client gRPC standard/provider-neutral | | Yellowstone | `ksp-onchain-transport-lib` | lib | Pressenti | `0.2.9` | client gRPC standard/provider-neutral |
| Off-chain price | `ksp-offchain-transport-lib` | lib | Retenu | `0.2.10` | première abstraction/provider de prix SOL/USD, SOL/EUR | | Off-chain price | `ksp-offchain-transport-lib` | lib | Retenu | `0.2.10` | première abstraction/provider de prix SOL/USD, SOL/EUR |
| Price Desk | nom à fixer | app | Retenu | `0.2.11` | visualisation/validation des prix + intégration Wallet Desk | | Price Desk | nom à fixer | app | Retenu | `0.2.11` | visualisation/validation des prix + intégration Wallet Desk |
| Wire | `ksp-interface-lib` | lib | Retenu | `0.2.12` | façade wire officielle + API publique wire | | Wire | `ksp-interface-lib` | lib | Retenu | `0.2.12` | façade wire officielle + API publique wire |
| Program API | `ksp-program-api` | API | Retenu | `0.2.13` | contrats extensibles Program | | Program API | `ksp-program-api` | API | Retenu | `0.2.13` | contrats extensibles Program |
| Program impl. | `ksp-program-lib` | lib | Retenu | vertical slices ultérieurs | implementations Program officielles | | Program impl. | `ksp-program-lib` | lib | Retenu | vertical slices ultérieurs | implementations Program officielles |
| Program extension | `ksp-program-<name>-lib` | lib externe | À la demande | dès besoin | implementation externe de `ksp-program-api` | | Program extension | `ksp-program-<name>-lib` | lib externe | À la demande | dès besoin | implementation externe de `ksp-program-api` |
| Store API | `ksp-store-api` | API | Retenu | `0.3.1` | contrats persistence backend-agnostic, RAW d'abord | | Store API | `ksp-store-api` | API | Retenu | `0.3.1` | contrats persistence backend-agnostic, RAW d'abord |
| Store PostgreSQL | `ksp-store-lib` | lib | Retenu | `0.3.1` | backend PostgreSQL officiel, RAW d'abord | | Store PostgreSQL | `ksp-store-lib` | lib | Retenu | `0.3.1` | backend PostgreSQL officiel, RAW d'abord |
| Job lifecycle | `ksp-job-api` | API | Retenu | `0.3.3` | lifecycle des jobs terminables | | Job lifecycle | `ksp-job-api` | API | Retenu | `0.3.3` | lifecycle des jobs terminables |
| Backfill | `ksp-job-backfill` | job/lib à préciser | Retenu | `0.3.3` | acquisition historique vers RAW | | Backfill | `ksp-job-backfill` | job/lib à préciser | Retenu | `0.3.3` | acquisition historique vers RAW |
| Backfill Desk | nom à fixer | app | Retenu | `0.3.4` | contrôle/inspection du backfill RAW | | Backfill Desk | nom à fixer | app | Retenu | `0.3.4` | contrôle/inspection du backfill RAW |
| 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 |
| CORE worker | nom à fixer | worker | Retenu | fin couche CORE | backlog RAW -> CORE continu | | CORE worker | nom à fixer | worker | Retenu | fin couche CORE | backlog RAW -> CORE continu |
| Materializer API | `ksp-materializer-api` | API | Retenu | premier groupe DECODE | contrats extensibles matérialisation | | Materializer API | `ksp-materializer-api` | API | Retenu | premier groupe DECODE | contrats extensibles matérialisation |
| Materializer impl. | `ksp-materializer-lib` | lib | Retenu | premier groupe DECODE | implementations officielles communes | | Materializer impl. | `ksp-materializer-lib` | lib | Retenu | premier groupe DECODE | implementations officielles communes |
| Execution policy | `ksp-execution-policy-api` | API | Retenu | premier vrai besoin execution | décision/safety multi-contexte | | Execution policy | `ksp-execution-policy-api` | API | Retenu | premier vrai besoin execution | décision/safety multi-contexte |
| Execution orchestration | `ksp-execution-lib` | lib | Retenu | premier vrai cycle execution | Program + policy + Wallet + transport | | Execution orchestration | `ksp-execution-lib` | lib | Retenu | premier vrai cycle execution | Program + policy + Wallet + transport |
| Scenarios | `ksp-scenario-<domain>-lib` | lib | Retenu | vertical slices | validation métier/devnet par groupe | | Scenarios | `ksp-scenario-<domain>-lib` | lib | Retenu | vertical slices | validation métier/devnet par groupe |
| Scenario API | `ksp-scenario-api` | API | Non retenu | — | norme souple avant trait commun | | Scenario API | `ksp-scenario-api` | API | Non retenu | — | norme souple avant trait commun |
| Market Desk | `ksp-app-market-desk` | app | Pressenti | après Meteora/Raydium/Pump/Orca | tokens, pools, trades, liquidity, price, OHLC | | Market Desk | `ksp-app-market-desk` | app | Pressenti | après Meteora/Raydium/Pump/Orca | tokens, pools, trades, liquidity, price, OHLC |
| Trading Intelligence | noms à définir | libs/jobs | Futur | après données stables | features/signaux/anomalies/ML | | Trading Intelligence | noms à définir | libs/jobs | Pressenti | après données stables | features/signaux/anomalies/ML |
## Contrats séparés retenus ## Contrats séparés retenus

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/005-DEPENDENCY_GRAPH.md --> <!-- file: docs/architecture/005-DEPENDENCY_GRAPH.md -->
<!-- version: 12 --> <!-- version: 13 -->
# Graphe de dépendances KSP # Graphe de dépendances KSP
@@ -33,7 +33,7 @@ Les applications/jobs/workers/scenarios composent les implementations concrètes
Workers continus et jobs bornés gardent des lifecycle APIs séparées. Workers continus et jobs bornés gardent des lifecycle APIs séparées.
# Fondations N1 ## Fondations N1
```text ```text
ksp-core-lib ksp-core-lib
@@ -50,7 +50,7 @@ ksp-config-lib
`ksp-config-lib` est l'unique propriétaire des documents Config, `.env` et variables KSP/KSPB. `ksp-config-lib` est l'unique propriétaire des documents Config, `.env` et variables KSP/KSPB.
# Transport on-chain ## Transport on-chain
```text ```text
ksp-onchain-transport-lib ksp-onchain-transport-lib
@@ -83,7 +83,7 @@ ksp-onchain-transport-lib
Cette direction est analogue à Config -> Logging : Config exprime/adapte la configuration, le composant reste propriétaire de ses contrats runtime. Cette direction est analogue à Config -> Logging : Config exprime/adapte la configuration, le composant reste propriétaire de ses contrats runtime.
## HTTP ### HTTP
```text ```text
HttpEndpointConfig HttpEndpointConfig
@@ -96,7 +96,7 @@ JSON-RPC read/write methods
Le pool HTTP sélectionne des endpoints/clients logiques selon rôles/capabilities/priorités/limites. Le pool HTTP sélectionne des endpoints/clients logiques selon rôles/capabilities/priorités/limites.
## WebSocket ### WebSocket
```text ```text
WsEndpoint WsEndpoint
@@ -110,11 +110,11 @@ Plusieurs sessions sur une même URL sont autorisées. Un scheduler/pool automat
Helius LaserStream WebSocket étend le même moteur/session ; il ne duplique pas le client standard. Helius LaserStream WebSocket étend le même moteur/session ; il ne duplique pas le client standard.
## Yellowstone ### Yellowstone
Yellowstone gRPC est un backend standard/provider-neutral. Les adapters/capabilities Helius/Triton/ERPC/Chainstack/Shyft peuvent venir plus tard sans redéfinir le contrat générique. Yellowstone gRPC est un backend standard/provider-neutral. Les adapters/capabilities Helius/Triton/ERPC/Chainstack/Shyft peuvent venir plus tard sans redéfinir le contrat générique.
# Transport off-chain ## Transport off-chain
```text ```text
ksp-offchain-transport-lib ksp-offchain-transport-lib
@@ -127,7 +127,7 @@ Aucune `ksp-offchain-transport-api` globale n'est prévue.
La première surface est un reader de prix ; metadata HTTP/IPFS/Arweave et autres besoins sont ajoutés lorsqu'ils deviennent concrets. La première surface est un reader de prix ; metadata HTTP/IPFS/Arweave et autres besoins sont ajoutés lorsqu'ils deviennent concrets.
# Wallet ## Wallet
```text ```text
ksp-wallet-lib ksp-wallet-lib
@@ -159,7 +159,7 @@ Le Wallet stocke/ouvre/signe. Il ne décide pas si une dépense est autorisée.
`WalletPolicy` historique migre conceptuellement vers execution policy, pas vers `ksp-wallet-lib`. `WalletPolicy` historique migre conceptuellement vers execution policy, pas vers `ksp-wallet-lib`.
# Interface / wire ## Interface / wire
```text ```text
ksp-interface-lib ksp-interface-lib
@@ -182,7 +182,7 @@ ksp-interface-lib -X-> Store
ksp-interface-lib -X-> Wallet ksp-interface-lib -X-> Wallet
``` ```
# Program ## Program
```text ```text
ksp-program-api ksp-program-api
@@ -206,7 +206,7 @@ ksp-program-<name>-lib
Elle n'a pas besoin de dépendre de `ksp-program-lib`. Elle n'a pas besoin de dépendre de `ksp-program-lib`.
# Execution / Policy ## Execution / Policy
```text ```text
ksp-execution-policy-api ksp-execution-policy-api
@@ -229,7 +229,7 @@ ksp-execution-lib -X-> ksp-program-lib
Une petite policy spécifique peut vivre dans une crate scenario/orchestrateur. Une ou plusieurs bibliothèques de policies communes ne sont créées qu'après démonstration d'une réutilisation réelle. Une petite policy spécifique peut vivre dans une crate scenario/orchestrateur. Une ou plusieurs bibliothèques de policies communes ne sont créées qu'après démonstration d'une réutilisation réelle.
# Data plane durable ## Data plane durable
```text ```text
D1 RAW D1 RAW
@@ -238,7 +238,7 @@ D1 RAW
-> D4 SPECIALIZED -> D4 SPECIALIZED
``` ```
## RAW ### RAW
```text ```text
transport model transport model
@@ -253,7 +253,7 @@ ksp-store-api
ksp-store-lib ksp-store-lib
``` ```
## CORE ### CORE
```text ```text
D1 RAW D1 RAW
@@ -275,7 +275,7 @@ RAW -> CORE -X-> ksp-program-lib
RAW -> CORE -X-> ksp-materializer-api RAW -> CORE -X-> ksp-materializer-api
``` ```
## DECODE ### DECODE
```text ```text
D2 CORE D2 CORE
@@ -293,7 +293,7 @@ ksp-materializer-api implementation
D3 DECODE / generic journal D3 DECODE / generic journal
``` ```
## SPECIALIZED ### SPECIALIZED
```text ```text
D3 DECODE D3 DECODE
@@ -305,7 +305,7 @@ specialized projector/materializer
D4 SPECIALIZED D4 SPECIALIZED
``` ```
# Materialization ## Materialization
```text ```text
ksp-materializer-api ksp-materializer-api
@@ -319,7 +319,7 @@ ksp-materializer-lib
Program/Materializer ne dépendent pas du Store backend. Program/Materializer ne dépendent pas du Store backend.
# Store ## Store
```text ```text
ksp-store-api ksp-store-api
@@ -341,7 +341,7 @@ ksp-store-lib -X-> transport/program/materializer
La première release Store (`0.3.1`) est RAW-only ; les contrats CORE/DECODE/SPECIALIZED sont ajoutés avec leurs couches. La première release Store (`0.3.1`) est RAW-only ; les contrats CORE/DECODE/SPECIALIZED sont ajoutés avec leurs couches.
# Jobs ## Jobs
```text ```text
ksp-job-api ksp-job-api
@@ -361,7 +361,7 @@ ksp-job-backfill
Il remplit RAW et ne décode rien. Il remplit RAW et ne décode rien.
# Workers ## Workers
```text ```text
ksp-worker-api ksp-worker-api
@@ -376,9 +376,9 @@ RAW worker et CORE worker sont introduits à la fin de leur couche respective, l
Les workers DECODE/SPECIALIZED sont introduits avec les groupes Program concernés plutôt que tous anticipés en bloc. Les workers DECODE/SPECIALIZED sont introduits avec les groupes Program concernés plutôt que tous anticipés en bloc.
# Apps ## Apps
## Wallet Desk ### Wallet Desk
```text ```text
ksp-app-wallet-desk ksp-app-wallet-desk
@@ -390,7 +390,7 @@ ksp-app-wallet-desk
L'app compose ; elle ne déplace pas Config/Wallet/Transport dans Tauri. Les handles `WalletView`/`WalletOwner` restent côté Rust, et le frontend ne reçoit que des DTOs sûrs. Config fournit la racine/profil Wallet et le profil Transport. Les passwords Wallet ne deviennent jamais des champs des documents JSON Config ; ils peuvent être saisis éphémèrement frontend -> Rust ou provenir plus tard de secrets process/`.env` `KSP_SECRET_WALLET_PASS_*` possédés exclusivement par Config. Le secret Solana ne devient jamais une valeur Config ni un DTO frontend. L'app compose ; elle ne déplace pas Config/Wallet/Transport dans Tauri. Les handles `WalletView`/`WalletOwner` restent côté Rust, et le frontend ne reçoit que des DTOs sûrs. Config fournit la racine/profil Wallet et le profil Transport. Les passwords Wallet ne deviennent jamais des champs des documents JSON Config ; ils peuvent être saisis éphémèrement frontend -> Rust ou provenir plus tard de secrets process/`.env` `KSP_SECRET_WALLET_PASS_*` possédés exclusivement par Config. Le secret Solana ne devient jamais une valeur Config ni un DTO frontend.
## Price Desk ### Price Desk
```text ```text
price desk price desk
@@ -399,7 +399,7 @@ price desk
-> ksp-logging-lib -> ksp-logging-lib
``` ```
## Backfill app ### Backfill app
```text ```text
backfill app backfill app
@@ -409,7 +409,7 @@ backfill app
-> ksp-logging-lib -> ksp-logging-lib
``` ```
## Market Desk ### Market Desk
```text ```text
ksp-app-market-desk ksp-app-market-desk
@@ -420,7 +420,7 @@ ksp-app-market-desk
Elle consomme les projections SPECIALIZED normalisées ; elle ne dépend pas directement des bibliothèques protocole externes. Elle consomme les projections SPECIALIZED normalisées ; elle ne dépend pas directement des bibliothèques protocole externes.
# Scenarios ## Scenarios
```text ```text
ksp-scenario-<domain>-lib ksp-scenario-<domain>-lib
@@ -437,7 +437,7 @@ Une policy Devnet petite et spécifique peut être implémentée dans la crate s
L'app demo correspondante reste un adapter UI mince. L'app demo correspondante reste un adapter UI mince.
# Progression verticale Program ## Progression verticale Program
À partir de DECODE : À partir de DECODE :
@@ -454,7 +454,7 @@ wire
Les satellites nécessaires restent dans le même groupe protocolaire. Les satellites nécessaires restent dans le même groupe protocolaire.
# Contrôle des cycles ## Contrôle des cycles
Le sens général reste descendant : Le sens général reste descendant :
@@ -476,7 +476,7 @@ job-api
Les applications/orchestrateurs réalisent les compositions explicites ; aucune boucle inverse ne doit être créée pour éviter une conversion au bon niveau. Les applications/orchestrateurs réalisent les compositions explicites ; aucune boucle inverse ne doit être créée pour éviter une conversion au bon niveau.
# Dépendances non retenues actuellement ## Dépendances non retenues actuellement
```text ```text
ksp-api-lib ksp-api-lib

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: 3 --> <!-- version: 4 -->
# Data, Materialization et Store # Data, Materialization et Store
@@ -32,9 +32,9 @@ Cette clarification remplace l'ancienne interprétation où D1 -> D2 pouvait dé
- les couches dérivées ne rendent jamais obligatoire une nouvelle acquisition réseau lorsque l'input durable nécessaire existe déjà ; - les couches dérivées ne rendent jamais obligatoire une nouvelle acquisition réseau lorsque l'input durable nécessaire existe déjà ;
- D4 privilégie les faits métier génériques lorsqu'une normalisation inter-protocoles est pertinente. - D4 privilégie les faits métier génériques lorsqu'une normalisation inter-protocoles est pertinente.
# D1 — RAW ## D1 — RAW
## Mission ### Mission
RAW conserve l'acquisition suffisamment fidèlement pour reconstruire CORE sans redemander la donnée au provider lorsqu'elle a déjà été capturée. RAW conserve l'acquisition suffisamment fidèlement pour reconstruire CORE sans redemander la donnée au provider lorsqu'elle a déjà été capturée.
@@ -42,7 +42,7 @@ Le transport peut normaliser plusieurs providers vers un modèle KSP homogène,
D1 ne décode aucun programme Solana/SPL/Metaplex/DEX. D1 ne décode aucun programme Solana/SPL/Metaplex/DEX.
## Frontière Transport -> RAW ### Frontière Transport -> RAW
```text ```text
HTTP / WS / gRPC / provider HTTP / WS / gRPC / provider
@@ -62,7 +62,7 @@ ksp-store-lib
`ksp-onchain-transport-lib` ne dépend ni de `ksp-store-api` ni de `ksp-store-lib`. `ksp-onchain-transport-lib` ne dépend ni de `ksp-store-api` ni de `ksp-store-lib`.
## Provenance RAW ### Provenance RAW
Selon la catégorie, D1 doit pouvoir conserver notamment : Selon la catégorie, D1 doit pouvoir conserver notamment :
@@ -77,9 +77,9 @@ Selon la catégorie, D1 doit pouvoir conserver notamment :
- identité/hash d'idempotence ; - identité/hash d'idempotence ;
- cursor/page/range/checkpoint lorsque pertinent. - cursor/page/range/checkpoint lorsque pertinent.
# D2 — CORE ## D2 — CORE
## Mission ### Mission
CORE est une **normalisation canonique générique de la blockchain Solana**. CORE est une **normalisation canonique générique de la blockchain Solana**.
@@ -104,7 +104,7 @@ Exemples de faits CORE candidats :
Un fait CORE peut contenir un `program_id`, des bytes et des indexes sans savoir que l'instruction représente un `Transfer`, un `Swap` ou une mutation Metadata. Un fait CORE peut contenir un `program_id`, des bytes et des indexes sans savoir que l'instruction représente un `Transfer`, un `Swap` ou une mutation Metadata.
## Frontière RAW -> CORE ### Frontière RAW -> CORE
```text ```text
D1 RAW D1 RAW
@@ -126,7 +126,7 @@ RAW -> CORE -X-> ksp-materializer-api
Les codecs/wires génériques nécessaires à la structure Solana peuvent provenir de `ksp-interface-lib` lorsqu'ils appartiennent à la façade wire officielle, sans transformer cette étape en décodage Program. Les codecs/wires génériques nécessaires à la structure Solana peuvent provenir de `ksp-interface-lib` lorsqu'ils appartiennent à la façade wire officielle, sans transformer cette étape en décodage Program.
## Provenance CORE ### Provenance CORE
D2 doit pouvoir relier chaque résultat à : D2 doit pouvoir relier chaque résultat à :
@@ -136,9 +136,9 @@ D2 doit pouvoir relier chaque résultat à :
- l'instant de processing/persistence ; - l'instant de processing/persistence ;
- son état de processing durable lorsque nécessaire. - son état de processing durable lorsque nécessaire.
# D3 — DECODE / matérialisation générique ## D3 — DECODE / matérialisation générique
## Mission ### Mission
DECODE commence lorsque KSP interprète un `program_id`, un layout d'instruction, un compte ou un événement selon un contrat Program/protocole. DECODE commence lorsque KSP interprète un `program_id`, un layout d'instruction, un compte ou un événement selon un contrat Program/protocole.
@@ -179,7 +179,7 @@ quel état/superseded/failed/replay ?
Les types exacts de decoded facts et du journal sont décidés lorsque les premiers vertical slices Program existent. Les types exacts de decoded facts et du journal sont décidés lorsque les premiers vertical slices Program existent.
## Frontière CORE -> DECODE ### Frontière CORE -> DECODE
```text ```text
D2 CORE D2 CORE
@@ -201,9 +201,9 @@ Les implémentations officielles pourront provenir de `ksp-program-lib` et `ksp-
Program et Materializer ne dépendent pas du backend Store. Program et Materializer ne dépendent pas du backend Store.
# D4 — SPECIALIZED ## D4 — SPECIALIZED
## Mission ### Mission
SPECIALIZED expose des projections queryables utiles aux applications, analyses et futurs modèles ML. SPECIALIZED expose des projections queryables utiles aux applications, analyses et futurs modèles ML.
@@ -222,7 +222,7 @@ Exemples :
- faits trading-adjacent ; - faits trading-adjacent ;
- projections d'autres domaines futurs. - projections d'autres domaines futurs.
## Faits métier génériques ### Faits métier génériques
Les projections de trading ne sont pas séparées automatiquement par protocole. Les projections de trading ne sont pas séparées automatiquement par protocole.
@@ -249,20 +249,20 @@ pump_trades
Les champs réellement protocol-specific peuvent être conservés dans une extension ou une projection dédiée uniquement lorsqu'un besoin de requête/invariant le justifie. Les champs réellement protocol-specific peuvent être conservés dans une extension ou une projection dédiée uniquement lorsqu'un besoin de requête/invariant le justifie.
## Metadata ### Metadata
La direction reste : La direction reste :
- projection canonique commune pour metadata d'assets/tokens alimentée par Metaplex Token Metadata et Token-2022 Metadata ; - projection canonique commune pour metadata d'assets/tokens alimentée par Metaplex Token Metadata et Token-2022 Metadata ;
- SPM reste distinct et sera redéveloppé plus tard avec le décodage généraliste. - SPM reste distinct et sera redéveloppé plus tard avec le décodage généraliste.
## OHLC ### OHLC
Les candles sont des projections SPECIALIZED calculées à partir des trades/price observations persistés. Les candles sont des projections SPECIALIZED calculées à partir des trades/price observations persistés.
Une application marché lit les OHLC matérialisés ; elle ne reparcourt pas toutes les transactions pour reconstruire les candles à chaque affichage. Une application marché lit les OHLC matérialisés ; elle ne reparcourt pas toutes les transactions pour reconstruire les candles à chaque affichage.
# Vertical slices Program ## Vertical slices Program
RAW et CORE sont développés horizontalement. RAW et CORE sont développés horizontalement.
@@ -283,7 +283,7 @@ Un groupe doit atteindre une cohérence verticale suffisante avant que le groupe
Les composants satellites nécessaires à un protocole appartiennent à son groupe : Pump fees avec Pump, Meteora vaults avec Meteora, etc. Les composants satellites nécessaires à un protocole appartiennent à son groupe : Pump fees avec Pump, Meteora vaults avec Meteora, etc.
# `ksp-store-api` ## `ksp-store-api`
`ksp-store-api` est backend-agnostic et porte les contrats nécessaires aux consommateurs. `ksp-store-api` est backend-agnostic et porte les contrats nécessaires aux consommateurs.
@@ -291,7 +291,7 @@ La première implementation `0.3.1` est volontairement **RAW-only** : elle ne cr
Les surfaces CORE/DECODE/SPECIALIZED sont ajoutées quand leurs couches sont réellement ouvertes. Les surfaces CORE/DECODE/SPECIALIZED sont ajoutées quand leurs couches sont réellement ouvertes.
# `ksp-store-lib` ## `ksp-store-lib`
`ksp-store-lib` fournit PostgreSQL comme backend officiel de référence derrière `ksp-store-api`. `ksp-store-lib` fournit PostgreSQL comme backend officiel de référence derrière `ksp-store-api`.
@@ -312,7 +312,7 @@ Il ne possède pas :
- materializer ; - materializer ;
- orchestration de worker/job. - orchestration de worker/job.
# `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.
@@ -320,7 +320,7 @@ Ils sont introduits seulement lorsque le premier groupe DECODE démontre le cont
Une projection très locale/spécifique peut rester dans son groupe si la création d'une implémentation commune séparée n'apporte pas de réutilisation réelle. Une projection très locale/spécifique peut rester dans son groupe si la création d'une implémentation commune séparée n'apporte pas de réutilisation réelle.
# Replay ## Replay
Les frontières durables restent replayables indépendamment : Les frontières durables restent replayables indépendamment :
@@ -332,7 +332,7 @@ DECODE -> SPECIALIZED
Un replay d'une couche dérivée ne doit pas refaire arbitrairement les couches précédentes. Un replay d'une couche dérivée ne doit pas refaire arbitrairement les couches précédentes.
# Notifications persistées ## Notifications persistées
Le Store reste source de vérité du backlog. Le Store reste source de vérité du backlog.
@@ -348,7 +348,7 @@ notify
Le consumer reconstruit toujours son backlog depuis le Store avec les versions de processor et les marqueurs d'idempotence. Le consumer reconstruit toujours son backlog depuis le Store avec les versions de processor et les marqueurs d'idempotence.
# Acquisition live et backfill ## Acquisition live et backfill
Live et backfill alimentent la même frontière RAW : Live et backfill alimentent la même frontière RAW :
@@ -360,7 +360,7 @@ backfill job ----/
Ils ne dupliquent pas le contrat durable. Ils ne dupliquent pas le contrat durable.
# Stabilité ## Stabilité
La stabilité cible est différente selon la couche : La stabilité cible est différente selon la couche :
@@ -369,7 +369,7 @@ La stabilité cible est différente selon la couche :
- DECODE : extensible par nouveaux Program/versions ; - DECODE : extensible par nouveaux Program/versions ;
- SPECIALIZED : plus évolutif selon les besoins de query, trading et analytics. - SPECIALIZED : plus évolutif selon les besoins de query, trading et analytics.
# Questions laissées ouvertes ## Questions laissées ouvertes
- schémas SQL exacts RAW puis CORE ; - schémas SQL exacts RAW puis CORE ;
- représentation persistable exacte d'un decoded output ; - représentation persistable exacte d'un decoded output ;

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md --> <!-- file: docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md -->
<!-- version: 3 --> <!-- version: 4 -->
# Acquisition, workers, jobs et pipelines spécialisés # Acquisition, workers, jobs et pipelines spécialisés
@@ -33,9 +33,9 @@ persistence
À partir de DECODE, les processors/jobs/workers/scenarios sont introduits **avec le groupe Program concerné**, en vertical slice, au lieu de créer à l'avance une grande flotte générique de workers de décodage/materialisation sans programme réel. À partir de DECODE, les processors/jobs/workers/scenarios sont introduits **avec le groupe Program concerné**, en vertical slice, au lieu de créer à l'avance une grande flotte générique de workers de décodage/materialisation sans programme réel.
# RAW ## RAW
## Pipeline RAW ingestion ### Pipeline RAW ingestion
Concept : Concept :
@@ -59,7 +59,7 @@ Une crate spécialisée `ksp-pipeline-raw-ingestion-lib` peut être introduite l
Elle ne choisit pas le provider réseau et ne pilote pas le range historique. Elle ne choisit pas le provider réseau et ne pilote pas le range historique.
## `ksp-job-backfill` ### `ksp-job-backfill`
Le premier backfill historique appartient à la couche RAW : Le premier backfill historique appartient à la couche RAW :
@@ -83,7 +83,7 @@ Le job :
- n'effectue aucun décodage Program ; - n'effectue aucun décodage Program ;
- n'écrit pas directement des faits CORE/DECODE/SPECIALIZED. - n'écrit pas directement des faits CORE/DECODE/SPECIALIZED.
## Worker RAW live ### Worker RAW live
Le worker live futur : Le worker live futur :
@@ -113,9 +113,9 @@ Sa hot reconfiguration peut concerner selon le transport :
La configuration desired/effective reste distinguée lorsqu'une reconfiguration est asynchrone. La configuration desired/effective reste distinguée lorsqu'une reconfiguration est asynchrone.
# CORE ## CORE
## Pipeline RAW -> CORE ### Pipeline RAW -> CORE
La normalisation CORE est générique Solana : La normalisation CORE est générique Solana :
@@ -139,7 +139,7 @@ CORE normalizer -X-> ksp-materializer-api
`ksp-interface-lib` peut fournir les wires Solana génériques nécessaires à la structure blockchain. `ksp-interface-lib` peut fournir les wires Solana génériques nécessaires à la structure blockchain.
## Job replay CORE ### Job replay CORE
Un job borné peut rejouer : Un job borné peut rejouer :
@@ -155,15 +155,15 @@ D2 CORE
sans redemander les données au réseau. sans redemander les données au réseau.
## Worker CORE ### Worker CORE
Un worker CORE continu peut consommer le backlog RAW nouvellement persisté et produire CORE. Un worker CORE continu peut consommer le backlog RAW nouvellement persisté et produire CORE.
Le Store reste source de vérité du backlog ; les notifications ne sont qu'un wake-up. Le Store reste source de vérité du backlog ; les notifications ne sont qu'un wake-up.
# DECODE et SPECIALIZED ## DECODE et SPECIALIZED
## Introduction par groupe fonctionnel ### Introduction par groupe fonctionnel
KSP ne crée pas d'abord un unique « worker decoder de tout Solana » puis tous les materializers plusieurs séries plus tard. KSP ne crée pas d'abord un unique « worker decoder de tout Solana » puis tous les materializers plusieurs séries plus tard.
@@ -189,7 +189,7 @@ Puis le même groupe avance vers préparation d'exécution, policy, execution et
Les jobs de replay et workers live correspondants réutilisent les mêmes processors du groupe. Les jobs de replay et workers live correspondants réutilisent les mêmes processors du groupe.
## Ordre fonctionnel ### Ordre fonctionnel
Direction actuelle : Direction actuelle :
@@ -211,7 +211,7 @@ Solana Core Programs
Un satellite protocolaire reste avec son groupe : Meteora vaults avec Meteora, Pump fee avec Pump, etc. Un satellite protocolaire reste avec son groupe : Meteora vaults avec Meteora, Pump fee avec Pump, etc.
# Worker API ## Worker API
`ksp-worker-api` reste une lifecycle API générique pour services continus. `ksp-worker-api` reste une lifecycle API générique pour services continus.
@@ -236,7 +236,7 @@ health
Une capability comme `reconfigure` n'est pas imposée à tous les workers. Une capability comme `reconfigure` n'est pas imposée à tous les workers.
# Job API ## Job API
`ksp-job-api` reste distinct de Worker API. `ksp-job-api` reste distinct de Worker API.
@@ -266,7 +266,7 @@ Les types exacts sont décidés à `0.3.3` avec le premier vrai backfill.
Aucune `ksp-job-control-lib` n'est créée sans duplication concrète. Aucune `ksp-job-control-lib` n'est créée sans duplication concrète.
# Backlog, claim et idempotence ## Backlog, claim et idempotence
Pour les processors asynchrones : Pour les processors asynchrones :
@@ -292,7 +292,7 @@ Les notifications ne remplacent jamais le Store.
La sémantique cible reste at-least-once avec idempotence durable, plutôt qu'un faux exactly-once. La sémantique cible reste at-least-once avec idempotence durable, plutôt qu'un faux exactly-once.
# Processing outcomes ## Processing outcomes
Les états exacts seront définis avec le premier processor durable, mais doivent distinguer au minimum les familles conceptuelles : Les états exacts seront définis avec le premier processor durable, mais doivent distinguer au minimum les familles conceptuelles :
@@ -303,7 +303,7 @@ Les états exacts seront définis avec le premier processor durable, mais doiven
- unsupported ; - unsupported ;
- superseded/replayed lorsque pertinent. - superseded/replayed lorsque pertinent.
# Reprise après crash ## Reprise après crash
Un worker/job doit reconstruire son état depuis : Un worker/job doit reconstruire son état depuis :
@@ -315,7 +315,7 @@ Un worker/job doit reconstruire son état depuis :
La mémoire du processus ne constitue jamais l'unique source de reprise. La mémoire du processus ne constitue jamais l'unique source de reprise.
# Logging ## Logging
Tous les pipelines/workers/jobs runtime utilisent `ksp-logging-lib`. Tous les pipelines/workers/jobs runtime utilisent `ksp-logging-lib`.
@@ -332,9 +332,9 @@ Les événements utiles comprennent notamment :
- reconfiguration desired/effective ; - reconfiguration desired/effective ;
- erreurs redacted. - erreurs redacted.
# Dépendances de composition ## Dépendances de composition
## RAW backfill ### RAW backfill
```text ```text
ksp-job-backfill ksp-job-backfill
@@ -345,7 +345,7 @@ ksp-job-backfill
-> ksp-logging-lib -> ksp-logging-lib
``` ```
## RAW worker ### RAW worker
```text ```text
ksp-worker-raw-retriever ksp-worker-raw-retriever
@@ -356,7 +356,7 @@ ksp-worker-raw-retriever
-> ksp-logging-lib -> ksp-logging-lib
``` ```
## CORE replay/worker ### CORE replay/worker
```text ```text
CORE processor CORE processor
@@ -368,7 +368,7 @@ CORE processor
Pas de Program API. Pas de Program API.
## Groupes DECODE/SPECIALIZED ### Groupes DECODE/SPECIALIZED
Le composant de composition du groupe peut utiliser : Le composant de composition du groupe peut utiliser :
@@ -382,7 +382,7 @@ ksp-store-api
selon les capacités réellement introduites. selon les capacités réellement introduites.
# Questions laissées ouvertes ## Questions laissées ouvertes
- nom final de la crate pipeline RAW si la réutilisation justifie une crate dédiée ; - nom final de la crate pipeline RAW si la réutilisation justifie une crate dédiée ;
- nom final du worker RAW ; - nom final du worker RAW ;

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: 4 --> <!-- version: 5 -->
# Applications, services, scenarios et control plane # Applications, services, scenarios et control plane
@@ -22,7 +22,7 @@ Les décisions portent sur :
- futur IPC ; - futur IPC ;
- futur orchestrateur/global app uniquement comme idées à conserver. - futur orchestrateur/global app uniquement comme idées à conserver.
# Principe général des applications ## Principe général des applications
Une application KSP est une interface et une couche de composition. Une application KSP est une interface et une couche de composition.
@@ -47,13 +47,13 @@ Elle ne doit pas réimplémenter :
- lifecycle interne d'un worker/job ; - lifecycle interne d'un worker/job ;
- logique de pipeline réutilisable. - logique de pipeline réutilisable.
# Applications de validation par couche ## Applications de validation par couche
KSP peut ajouter une petite application spécialisée à la fin d'une couche RAW ou CORE lorsque cela permet de valider et exploiter réellement la couche avant de passer à la suivante. Ces applications lisent les contrats KSP et ne recopient pas les processors dans Tauri. KSP peut ajouter une petite application spécialisée à la fin d'une couche RAW ou CORE lorsque cela permet de valider et exploiter réellement la couche avant de passer à la suivante. Ces applications lisent les contrats KSP et ne recopient pas les processors dans Tauri.
À partir des vertical slices Program, les applications restent attachées aux besoins réels : demos de scenarios pour l'exécution et Market Desk pour les projections de marché. À partir des vertical slices Program, les applications restent attachées aux besoins réels : demos de scenarios pour l'exécution et Market Desk pour les projections de marché.
# Priorité aux applications spécialisées ## Priorité aux applications spécialisées
KSP ne planifie pas actuellement de cockpit desktop global. KSP ne planifie pas actuellement de cockpit desktop global.
@@ -85,7 +85,7 @@ Les noms exacts des managers workers seront décidés avec les premières applic
Une future application globale de contrôle/exploitation est considérée comme un produit futur attendu, mais elle n'est pas un livrable du roadmap actuel et ne doit pas influencer prématurément les contrats. Une future application globale de contrôle/exploitation est considérée comme un produit futur attendu, mais elle n'est pas un livrable du roadmap actuel et ne doit pas influencer prématurément les contrats.
# Applications spécialisées et dépendances directes ## Applications spécialisées et dépendances directes
Une application spécialisée peut dépendre directement de la bibliothèque KSP correspondant à sa responsabilité. Une application spécialisée peut dépendre directement de la bibliothèque KSP correspondant à sa responsabilité.
@@ -105,7 +105,7 @@ ksp-app-store-desk
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
Les applications desktop Tauri restent des adapters/interfaces. Les applications desktop Tauri restent des adapters/interfaces.
@@ -127,7 +127,7 @@ Une application Tauri peut devoir intégrer un plugin/framework de tracing, mais
En distribution, une application Tauri KSP ne dépend pas du checkout source ni du CWD du launcher. Les resources Config/Schemas nécessaires sont embarquées dans le bundle ; Tauri résout leur racine immutable et `ksp-config-lib` prépare une racine KSP user-writable commune avant le bootstrap applicatif. Les Config utilisateur existantes sont conservées, les schemas package-owned sont resynchronisés et `.env` reste une ressource locale writable jamais embarquée. Cette adaptation de packaging ne transfère ni ownership Config ni accès filesystem au frontend. En distribution, une application Tauri KSP ne dépend pas du checkout source ni du CWD du launcher. Les resources Config/Schemas nécessaires sont embarquées dans le bundle ; Tauri résout leur racine immutable et `ksp-config-lib` prépare une racine KSP user-writable commune avant le bootstrap applicatif. Les Config utilisateur existantes sont conservées, les schemas package-owned sont resynchronisés et `.env` reste une ressource locale writable jamais embarquée. Cette adaptation de packaging ne transfère ni ownership Config ni accès filesystem au frontend.
# Workers comme services indépendants ## Workers comme services indépendants
Les workers KSP doivent pouvoir fonctionner comme **services/processus indépendants**. Les workers KSP doivent pouvoir fonctionner comme **services/processus indépendants**.
@@ -143,7 +143,7 @@ Les workers ne forment pas un pipeline process-to-process couplé.
Ils synchronisent leur data plane via les niveaux durables du Store. Ils synchronisent leur data plane via les niveaux durables du Store.
## Packaging préféré ### Packaging préféré
Pour éviter de séparer artificiellement logique réutilisable et executable dans deux packages lorsqu'il n'y a pas encore de besoin, la direction préférée est : Pour éviter de séparer artificiellement logique réutilisable et executable dans deux packages lorsqu'il n'y a pas encore de besoin, la direction préférée est :
@@ -171,7 +171,7 @@ Il ne duplique pas le pipeline ni la logique de worker contenue dans la cible bi
Une séparation future en packages distincts `*-lib` / executable n'est introduite que si un besoin concret le justifie. Une séparation future en packages distincts `*-lib` / executable n'est introduite que si un besoin concret le justifie.
# Responsabilité du binaire worker ## Responsabilité du binaire worker
Le binaire autonome peut notamment : Le binaire autonome peut notamment :
@@ -186,7 +186,7 @@ Le binaire autonome peut notamment :
Il ne contient pas de logique de processing qui ne serait pas réutilisable depuis la bibliothèque worker. Il ne contient pas de logique de processing qui ne serait pas réutilisable depuis la bibliothèque worker.
# Indépendance des workers ## Indépendance des workers
Aucun worker ne dépend directement d'un autre worker concret. Aucun worker ne dépend directement d'un autre worker concret.
@@ -222,7 +222,7 @@ Les notifications accélèrent le réveil mais ne créent pas une connexion fonc
Cette indépendance permet arrêt, restart ou mise à jour d'un worker sans arrêter volontairement les autres. Cette indépendance permet arrêt, restart ou mise à jour d'un worker sans arrêter volontairement les autres.
# Ordre global de démarrage ## Ordre global de démarrage
Aucun ordre global strict de démarrage n'est figé dans cette prerelease. Aucun ordre global strict de démarrage n'est figé dans cette prerelease.
@@ -234,11 +234,11 @@ La robustesse recherchée est :
Un futur manager/orchestrateur pourra choisir un ordre pratique de démarrage/arrêt, mais cette policy n'est pas inscrite dans les contrats worker. Un futur manager/orchestrateur pourra choisir un ordre pratique de démarrage/arrêt, mais cette policy n'est pas inscrite dans les contrats worker.
# Data plane et control plane ## Data plane et control plane
KSP distingue explicitement deux plans. KSP distingue explicitement deux plans.
## Data plane ### Data plane
Le data plane transporte/persiste les données Solana et les résultats de processing : Le data plane transporte/persiste les données Solana et les résultats de processing :
@@ -253,7 +253,7 @@ avec notifications de données persistées comme wake-up.
Les workers ne s'échangent pas leurs payloads via le control plane. Les workers ne s'échangent pas leurs payloads via le control plane.
## Control plane ### Control plane
Le control plane sert à : Le control plane sert à :
@@ -276,7 +276,7 @@ future manager/orchestrator
Le control plane n'est pas le data plane. Le control plane n'est pas le data plane.
# `ksp-worker-control-lib` ## `ksp-worker-control-lib`
`ksp-worker-control-lib` reste la bibliothèque de gouvernance réutilisable au-dessus de `ksp-worker-api`. `ksp-worker-control-lib` reste la bibliothèque de gouvernance réutilisable au-dessus de `ksp-worker-api`.
@@ -297,7 +297,7 @@ Elle ne connaît pas :
- Tauri ; - Tauri ;
- les types propriétaires d'un worker concret au-delà des contrats publics nécessaires. - les types propriétaires d'un worker concret au-delà des contrats publics nécessaires.
# Worker local et worker distant ## Worker local et worker distant
La sémantique de `ksp-worker-api` ne doit pas dépendre du fait qu'un worker soit appelé : La sémantique de `ksp-worker-api` ne doit pas dépendre du fait qu'un worker soit appelé :
@@ -323,7 +323,7 @@ Conceptuellement :
Le type exact de proxy/transport n'est pas défini maintenant. Le type exact de proxy/transport n'est pas défini maintenant.
# IPC ## IPC
Le besoin d'IPC existe naturellement dès qu'une app manager doit piloter un worker autonome. Le besoin d'IPC existe naturellement dès qu'une app manager doit piloter un worker autonome.
@@ -345,7 +345,7 @@ Le premier manager/service réel devra choisir un mécanisme IPC adapté et pour
Le choix du mécanisme exact est reporté à la release fonctionnelle concernée. Le choix du mécanisme exact est reporté à la release fonctionnelle concernée.
# Jobs ## Jobs
Les jobs restent distincts des workers. Les jobs restent distincts des workers.
@@ -357,7 +357,7 @@ Le fait qu'un worker soit un process/service indépendant ne force pas les jobs
Le packaging/exécution des jobs sera déterminé avec les premiers jobs réels. Le packaging/exécution des jobs sera déterminé avec les premiers jobs réels.
# Scenarios : logique dans la bibliothèque ## Scenarios : logique dans la bibliothèque
La source de vérité d'un scenario est toujours : La source de vérité d'un scenario est toujours :
@@ -387,7 +387,7 @@ Elle peut être consommée par :
- futur CLI/tool ; - futur CLI/tool ;
- CI/integration environment lorsque pertinent. - CI/integration environment lorsque pertinent.
# Pas de `ksp-scenario-api` actuellement ## Pas de `ksp-scenario-api` actuellement
Aucun trait universel de scenario n'est imposé. Aucun trait universel de scenario n'est imposé.
@@ -395,7 +395,7 @@ Les premières implementations utilisent une norme documentaire commune définie
Une API commune ne sera créée que si plusieurs scenarios réels révèlent un contrat réutilisable qui apporte plus que des conventions. Une API commune ne sera créée que si plusieurs scenarios réels révèlent un contrat réutilisable qui apporte plus que des conventions.
# Applications desktop demo de scenarios ## Applications desktop demo de scenarios
Convention retenue : Convention retenue :
@@ -429,7 +429,7 @@ KSP capabilities
L'app ne construit pas un scenario parallèle. L'app ne construit pas un scenario parallèle.
# Scenarios et execution policy ## Scenarios et execution policy
Une crate scenario peut fournir une implémentation de `ksp-execution-policy-api` adaptée à son environnement. Une crate scenario peut fournir une implémentation de `ksp-execution-policy-api` adaptée à son environnement.
@@ -443,7 +443,7 @@ Exemple Devnet :
Cette policy appartient au scenario, pas à `ksp-program-lib`. Cette policy appartient au scenario, pas à `ksp-program-lib`.
# Applications worker spécialisées ## Applications worker spécialisées
Une application spécialisée de worker peut être créée lorsqu'elle est utile pour développer/tester/exploiter ce service. Une application spécialisée de worker peut être créée lorsqu'elle est utile pour développer/tester/exploiter ce service.
@@ -466,7 +466,7 @@ independent worker service
La nomenclature précise des apps sera fixée à la première implémentation pour éviter de multiplier prématurément les packages. La nomenclature précise des apps sera fixée à la première implémentation pour éviter de multiplier prématurément les packages.
# Configuration desired vs effective ## Configuration desired vs effective
La configuration persistée/résolue et la configuration effectivement appliquée sont deux faits distincts. La configuration persistée/résolue et la configuration effectivement appliquée sont deux faits distincts.
@@ -483,7 +483,7 @@ worker status
Une app spécialisée peut éditer une configuration puis demander son application, mais ne doit pas considérer l'écriture du document comme la preuve que le worker l'a appliquée. Une app spécialisée peut éditer une configuration puis demander son application, mais ne doit pas considérer l'écriture du document comme la preuve que le worker l'a appliquée.
# Market Desk progressive ## Market Desk progressive
Après les groupes Meteora/Raydium/Pump/Orca, KSP prévoit une première application spécialisée candidate `ksp-app-market-desk`. Après les groupes Meteora/Raydium/Pump/Orca, KSP prévoit une première application spécialisée candidate `ksp-app-market-desk`.
@@ -493,7 +493,7 @@ Après Jupiter/OKX, la même application est enrichie avec routes, legs, DEX imp
Les OHLC sont matérialisés dans SPECIALIZED et consommés par l'application; ils ne sont pas recalculés à partir de tout l'historique lors de chaque rendu. Les OHLC sont matérialisés dans SPECIALIZED et consommés par l'application; ils ne sont pas recalculés à partir de tout l'historique lors de chaque rendu.
# Future orchestrator ## Future orchestrator
Un orchestrateur global pourra devenir utile lorsque plusieurs services/managers/jobs devront être coordonnés. Un orchestrateur global pourra devenir utile lorsque plusieurs services/managers/jobs devront être coordonnés.
@@ -509,7 +509,7 @@ Sa responsabilité éventuelle devra rester control plane :
Il ne doit jamais devenir un nouveau propriétaire de Program, Store, transport ou materialization. Il ne doit jamais devenir un nouveau propriétaire de Program, Store, transport ou materialization.
# Future global application ## Future global application
Une application globale d'exploitation/contrôle est attendue à terme. Une application globale d'exploitation/contrôle est attendue à terme.
@@ -528,7 +528,7 @@ Avant elle, KSP doit disposer d'applications spécialisées et demos permettant
Son nom et son scope ne sont pas définis. Son nom et son scope ne sont pas définis.
# Graphe synthétique ## Graphe synthétique
```text ```text
specialized desktop app specialized desktop app
@@ -551,7 +551,7 @@ transport -> RAW -> CORE -> DECODE -> SPECIALIZED
Aucun payload de processing n'a besoin de transiter via l'UI/control plane. Aucun payload de processing n'a besoin de transiter via l'UI/control plane.
# Questions laissées ouvertes ## Questions laissées ouvertes
Les premières implementations concernées devront fixer : Les premières implementations concernées devront fixer :

View File

@@ -1,5 +1,5 @@
<!-- file: docs/formats/000-README.md --> <!-- file: docs/formats/000-README.md -->
<!-- version: 8 --> <!-- version: 9 -->
# Formats KSP # Formats KSP
@@ -9,5 +9,5 @@ Une spécification de format décrit le wire exact, les encodages, les limites,
## Formats actifs ## Formats actifs
- [`KSPWALLET_V1.md`](KSPWALLET_V1.md) — spécification du format natif autonome `.kspwallet` V1. `0.2.5-pre.003` fige l'enveloppe/wire et les transcripts/AAD, `pre.004` ajoute Argon2id/XChaCha20-Poly1305/CSPRNG OS, `pre.005` fixe les payloads plaintext, le profil de création KSP calibré, l'autorité Ed25519 OWNER et le vecteur complet, `pre.006``pre.008` matérialisent persistence/administration/transfert, `pre.009` ferme l'audit adversarial/interoperabilité/compliance et `pre.010` synchronise la documentation finale sans modifier le wire V1. - [`KSPWALLET_V1.md`](KSPWALLET_V1.md) — spécification du format natif autonome `.kspwallet` V1. `0.2.5` publie le format stable après une trajectoire où `pre.003` fige l'enveloppe/wire et les transcripts/AAD, `pre.004` ajoute Argon2id/XChaCha20-Poly1305/CSPRNG OS, `pre.005` fixe les payloads plaintext, le profil de création KSP calibré, l'autorité Ed25519 OWNER et le vecteur complet, `pre.006``pre.008` matérialisent persistence/administration/transfert, `pre.009` ferme l'audit adversarial/interoperabilité/compliance et `pre.010` synchronise la documentation finale sans modifier le wire V1.
- [`KSPWALLET_V2.md`](KSPWALLET_V2.md) — wire binaire natif V2 introduit par `0.2.6-pre.015`, runtime multi-version/default V2 matérialisé en `pre.016`, puis migration explicite OWNER-authentifiée V1 -> V2 en `pre.017` : framing canonique KSP, IDs numériques, longueurs big-endian, aucun Base64/compression, domains/transcripts V2 distincts et politique `default != latest`. - [`KSPWALLET_V2.md`](KSPWALLET_V2.md) — wire binaire natif V2 publié stable avec `0.2.6`, introduit par `pre.015`, runtime multi-version/default V2 matérialisé en `pre.016`, puis migration explicite OWNER-authentifiée V1 -> V2 en `pre.017` : framing canonique KSP, IDs numériques, longueurs big-endian, aucun Base64/compression, domains/transcripts V2 distincts et politique `default != latest`.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/formats/KSPWALLET_V1.md --> <!-- file: docs/formats/KSPWALLET_V1.md -->
<!-- version: 13 --> <!-- version: 14 -->
# `.kspwallet` V1 — spécification du format natif Wallet KSP # `.kspwallet` V1 — spécification du format natif Wallet KSP
@@ -22,7 +22,7 @@ règles unknown-field / unknown-version
`0.2.5-pre.004` ajoute les primitives KDF/AEAD normatives et un premier vecteur cryptographique public. `0.2.5-pre.005` fixe les payloads plaintext V1, l'autorité Ed25519 OWNER, les procédures de création et d'ouverture VIEW/OWNER, le profil de création KSP issu du benchmark opérateur et un vecteur `.kspwallet` complet généré indépendamment du code Rust. `0.2.5-pre.006` matérialise la persistence filesystem bornée et la création no-clobber. `0.2.5-pre.007` matérialise la signature Solana OWNER, l'administration des metadata, les rotations OWNER/VIEW, la révocation forte VIEW et leur remplacement filesystem capability-bound. `0.2.5-pre.008` matérialise les adapters Solana CLI JSON et Base58 complet, leur inspection sûre, l'import no-clobber vers un nouveau `.kspwallet` et l'export secret OWNER explicite. `pre.009` ferme l'audit adversarial/interoperability/compliance et `pre.010` synchronise la documentation de clôture sans modifier le wire ni les primitives. Après publication stable de V1, toute évolution qui modifie un élément déclaré **figé** par cette spécification doit être explicitement tracée ; une incompatibilité de wire exige un nouveau `format_version`. `0.2.5-pre.004` ajoute les primitives KDF/AEAD normatives et un premier vecteur cryptographique public. `0.2.5-pre.005` fixe les payloads plaintext V1, l'autorité Ed25519 OWNER, les procédures de création et d'ouverture VIEW/OWNER, le profil de création KSP issu du benchmark opérateur et un vecteur `.kspwallet` complet généré indépendamment du code Rust. `0.2.5-pre.006` matérialise la persistence filesystem bornée et la création no-clobber. `0.2.5-pre.007` matérialise la signature Solana OWNER, l'administration des metadata, les rotations OWNER/VIEW, la révocation forte VIEW et leur remplacement filesystem capability-bound. `0.2.5-pre.008` matérialise les adapters Solana CLI JSON et Base58 complet, leur inspection sûre, l'import no-clobber vers un nouveau `.kspwallet` et l'export secret OWNER explicite. `pre.009` ferme l'audit adversarial/interoperability/compliance et `pre.010` synchronise la documentation de clôture sans modifier le wire ni les primitives. Après publication stable de V1, toute évolution qui modifie un élément déclaré **figé** par cette spécification doit être explicitement tracée ; une incompatibilité de wire exige un nouveau `format_version`.
Depuis `0.2.6-pre.015`, V1 reste explicitement supporté comme format historique stable tandis que V2 définit le nouveau wire binaire. Les APIs versionnées V1 sont conservées et une lecture générique future doit auto-détecter V1/V2 sans migration implicite. Depuis `0.2.6-pre.015`, V1 reste explicitement supporté comme format historique stable tandis que V2 définit le nouveau wire binaire. Les APIs versionnées V1 sont conservées et les lectures génériques auto-détectent V1/V2 sans migration implicite.
Le but final est qu'une implémentation indépendante en Rust, Python, Go, C/C++, Java ou autre puisse créer, parser, vérifier et ouvrir un `.kspwallet` sans lire le code source de `ksp-wallet-lib`. Le but final est qu'une implémentation indépendante en Rust, Python, Go, C/C++, Java ou autre puisse créer, parser, vérifier et ouvrir un `.kspwallet` sans lire le code source de `ksp-wallet-lib`.

View File

@@ -1,11 +1,11 @@
<!-- file: docs/formats/KSPWALLET_V2.md --> <!-- file: docs/formats/KSPWALLET_V2.md -->
<!-- version: 2 --> <!-- version: 3 -->
# `.kspwallet` V2 — spécification du wire binaire natif KSP # `.kspwallet` V2 — spécification du wire binaire natif KSP
## 1. Statut et objectif ## 1. Statut et objectif
Ce document est l'autorité normative du **wire `.kspwallet` `format_version = 2`** introduit par `0.2.6-pre.015`. Ce document est l'autorité normative du **wire `.kspwallet` `format_version = 2`**, introduit par `0.2.6-pre.015` et publié stable avec KSP `0.2.6`.
V2 remplace l'enveloppe JSON/Base64url de V1 par un framing binaire KSP canonique. L'objectif est : V2 remplace l'enveloppe JSON/Base64url de V1 par un framing binaire KSP canonique. L'objectif est :

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/000-README.md --> <!-- file: docs/plans/000-README.md -->
<!-- version: 52 --> <!-- version: 53 -->
# Plans KSP # Plans KSP
@@ -21,7 +21,7 @@ Un plan décrit le périmètre, les décisions déjà acquises, les questions ou
- [`010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) — plan historique clôturé de la release stable `0.2.3 — HTTP Transactions`, ouvert par `pre.001`, exécuté jusqu'à `pre.009` puis publié par `rel.001`; il couvre les 11 méthodes, la classification `8 Read / 2 WriteSubmission / 1 Simulation`, `KSP-TRANSPORT-007`, le no-resend et la préparation de `0.2.4`. - [`010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) — plan historique clôturé de la release stable `0.2.3 — HTTP Transactions`, ouvert par `pre.001`, exécuté jusqu'à `pre.009` puis publié par `rel.001`; il couvre les 11 méthodes, la classification `8 Read / 2 WriteSubmission / 1 Simulation`, `KSP-TRANSPORT-007`, le no-resend et la préparation de `0.2.4`.
- [`011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md`](011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md) — plan historique clôturé de la release stable `0.2.4`, ouvert par `pre.001`, exécuté jusquà `pre.009`, complété par le fix documentaire Wallet `pre.009-fix.001` puis publié par `rel.001`; il couvre les 10 Blocks + 5 Economics et la compliance finale `52/52 + 14/14` sous `KSP-TRANSPORT-007`. - [`011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md`](011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md) — plan historique clôturé de la release stable `0.2.4`, ouvert par `pre.001`, exécuté jusquà `pre.009`, complété par le fix documentaire Wallet `pre.009-fix.001` puis publié par `rel.001`; il couvre les 10 Blocks + 5 Economics et la compliance finale `52/52 + 14/14` sous `KSP-TRANSPORT-007`.
- [`012-V0_2_5_WALLET_FOUNDATION_PLAN.md`](012-V0_2_5_WALLET_FOUNDATION_PLAN.md) — plan historique clôturé de la release stable `0.2.5 — Wallet foundation`, ouvert par `pre.001`, livré jusquà `pre.010`, renforcé par `pre.010-fix.001``fix.003` pour Dalek 3 et la normalisation Rust/audit structurel, puis publié par `rel.001`; il couvre `.kspwallet` V1, VIEW/OWNER, crypto, persistence, administration, transfer et compliance. - [`012-V0_2_5_WALLET_FOUNDATION_PLAN.md`](012-V0_2_5_WALLET_FOUNDATION_PLAN.md) — plan historique clôturé de la release stable `0.2.5 — Wallet foundation`, ouvert par `pre.001`, livré jusquà `pre.010`, renforcé par `pre.010-fix.001``fix.003` pour Dalek 3 et la normalisation Rust/audit structurel, puis publié par `rel.001`; il couvre `.kspwallet` V1, VIEW/OWNER, crypto, persistence, administration, transfer et compliance.
- [`013-V0_2_6_WALLET_DESK_PLAN.md`](013-V0_2_6_WALLET_DESK_PLAN.md) — plan actif de `0.2.6 — Wallet Desk`, ouvert par `pre.001`; shell Tauri, composition Config/Wallet/Transport, inventory, lifecycle VIEW/OWNER, administration, import/export et compliance sont acquis. `pre.015``pre.017` ajoutent le wire binaire `.kspwallet` V2, les APIs génériques/versionnées, le runtime V2 et la migration explicite V1 -> V2. `pre.018` matérialise désormais la candidate documentaire et le runtime Tauri packagé commun user-writable ; validation opérateur/build final puis `rel.001` restent à fermer. - [`013-V0_2_6_WALLET_DESK_PLAN.md`](013-V0_2_6_WALLET_DESK_PLAN.md) — plan historique clôturé de la release stable `0.2.6 — Wallet Desk`, ouvert par `pre.001`, étendu en `pre.015``pre.017` au wire binaire `.kspwallet` V2, aux APIs multi-version et à la migration V1 -> V2, puis fermé par `pre.018`/`fix.001` avec le runtime Tauri packagé et le build final vert avant publication `rel.001`.
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/001-V0_0_3_PLAN.md --> <!-- file: docs/plans/001-V0_0_3_PLAN.md -->
<!-- version: 16 --> <!-- version: 17 -->
# Plan KSP 0.0.3 # Plan KSP 0.0.3

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md --> <!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md -->
<!-- version: 77 --> <!-- version: 79 -->
# Séquence des releases fonctionnelles KSP # Séquence des releases fonctionnelles KSP
@@ -18,7 +18,7 @@ Principes :
- une session de chat peut enchaîner plusieurs releases si chacune est entièrement clôturée avant l'ouverture de la suivante et si le sizing de la suivante reste raisonnablement positif ; cette possibilité ne fusionne ni les numéros, ni les deltas, ni les validations ; - une session de chat peut enchaîner plusieurs releases si chacune est entièrement clôturée avant l'ouverture de la suivante et si le sizing de la suivante reste raisonnablement positif ; cette possibilité ne fusionne ni les numéros, ni les deltas, ni les validations ;
- les numéros futurs sont confirmés lorsque leur série approche et que les dépendances réelles sont connues. - les numéros futurs sont confirmés lorsque leur série approche et que les dépendances réelles sont connues.
# Première série fonctionnelle : `0.1.x` ## Première série fonctionnelle : `0.1.x`
La série `0.1.x` construit les fondations N1 dans l'ordre de dépendances réel. La série `0.1.x` construit les fondations N1 dans l'ordre de dépendances réel.
@@ -41,15 +41,15 @@ Séquence par défaut :
`0.1.4 — ksp-app-config-desk` établit le modèle de référence des futures applications Tauri KSP sans déplacer la logique Config dans l'application. Sa matrice finale a été validée avant `rel.001`, avec le build Tauri exécuté en dernière opération. `0.1.4 — ksp-app-config-desk` établit le modèle de référence des futures applications Tauri KSP sans déplacer la logique Config dans l'application. Sa matrice finale a été validée avant `rel.001`, avec le build Tauri exécuté en dernière opération.
## `0.1.1` — Core foundation ### `0.1.1` — Core foundation
### Mission #### Mission
Stabiliser `ksp-core-lib` comme fondation N1 minimale et durable. Stabiliser `ksp-core-lib` comme fondation N1 minimale et durable.
Le Core possède uniquement les contrats réellement transversaux nécessaires aux couches supérieures. Le Core possède uniquement les contrats réellement transversaux nécessaires aux couches supérieures.
### Surface stabilisée #### Surface stabilisée
`0.1.1` stabilise : `0.1.1` stabilise :
@@ -62,13 +62,13 @@ Le Core possède uniquement les contrats réellement transversaux nécessaires a
- une taxonomie extensible séparant notamment `subfamily` et `program_version` ; - une taxonomie extensible séparant notamment `subfamily` et `program_version` ;
- les réexports crate-root, rustdocs et tests publics correspondants. - les réexports crate-root, rustdocs et tests publics correspondants.
### Dépendances #### Dépendances
Core ne dépend pas de `ksp-logging-lib`, Config, Wallet, Store, Transport, Program ou Materializer. Core ne dépend pas de `ksp-logging-lib`, Config, Wallet, Store, Transport, Program ou Materializer.
La seule dépendance externe directe de `ksp-core-lib` à la clôture est `solana-pubkey`, déclarée au workspace avec la génération `^4.3`, `default-features = false`, puis héritée par la crate avec `.workspace = true`. Aucune feature optionnelle supplémentaire n'est activée dans `0.1.1`. La seule dépendance externe directe de `ksp-core-lib` à la clôture est `solana-pubkey`, déclarée au workspace avec la génération `^4.3`, `default-features = false`, puis héritée par la crate avec `.workspace = true`. Aucune feature optionnelle supplémentaire n'est activée dans `0.1.1`.
### Hors scope #### Hors scope
- logging ; - logging ;
- configuration ; - configuration ;
@@ -83,7 +83,7 @@ La seule dépendance externe directe de `ksp-core-lib` à la clôture est `solan
- workers/jobs ; - workers/jobs ;
- scenarios. - scenarios.
### Lifecycle de la release #### Lifecycle de la release
Trajectoire réellement suivie : Trajectoire réellement suivie :
@@ -99,13 +99,13 @@ pre.005 validation finale/docs/cleanup/prompt 0.1.2
rel.001 publication stable validée de 0.1.1 rel.001 publication stable validée de 0.1.1
``` ```
## `0.1.2` — Logging foundation ### `0.1.2` — Logging foundation
### Mission #### Mission
Faire de `ksp-logging-lib` la façade KSP unique de logging/tracing pour les composants runtime. Faire de `ksp-logging-lib` la façade KSP unique de logging/tracing pour les composants runtime.
### Surface stabilisée #### Surface stabilisée
`0.1.2` stabilise : `0.1.2` stabilise :
@@ -120,7 +120,7 @@ Faire de `ksp-logging-lib` la façade KSP unique de logging/tracing pour les com
- tests de saturation, concurrence/reload, lifecycle spans et instrumentation Tokio réelle ; - tests de saturation, concurrence/reload, lifecycle spans et instrumentation Tokio réelle ;
- audit d'ownership empêchant les autres crates workspace de dépendre directement de la stack `tracing*`. - audit d'ownership empêchant les autres crates workspace de dépendre directement de la stack `tracing*`.
### Dépendances runtime #### Dépendances runtime
```text ```text
ksp-logging-lib ksp-logging-lib
@@ -134,7 +134,7 @@ Tokio est uniquement une dev-dependency de `ksp-logging-lib` pour les tests asyn
`ksp-logging-lib` ne dépend pas de `ksp-config-lib`. Config pourra convertir ses documents résolus en `LoggingSettings` puis utiliser le lifecycle public de Logging. `ksp-logging-lib` ne dépend pas de `ksp-config-lib`. Config pourra convertir ses documents résolus en `LoggingSettings` puis utiliser le lifecycle public de Logging.
### Lifecycle de la release #### Lifecycle de la release
Trajectoire réellement suivie : Trajectoire réellement suivie :
@@ -154,9 +154,9 @@ pre.006-fix.001 correction documentaire du prompt Config
rel.001 publication stable validée de 0.1.2 rel.001 publication stable validée de 0.1.2
``` ```
## `0.1.3` — Configuration foundation ### `0.1.3` — Configuration foundation
### Dépendances stabilisées #### Dépendances stabilisées
```text ```text
ksp-config-lib ksp-config-lib
@@ -164,7 +164,7 @@ ksp-config-lib
-> ksp-logging-lib -> ksp-logging-lib
``` ```
### Mission #### Mission
Introduire la configuration générale KSP. Introduire la configuration générale KSP.
@@ -193,7 +193,7 @@ Périmètre retenu :
- accès explicite aux secrets pour les surfaces de management autorisées ; - accès explicite aux secrets pour les surfaces de management autorisées ;
- modèle Logging non régressif : console configurable et plusieurs sinks fichier/routings ; les capacités manquantes de `ksp-logging-lib 0.1.2` sont complétées dans Logging sans dépendance inverse vers Config. - modèle Logging non régressif : console configurable et plusieurs sinks fichier/routings ; les capacités manquantes de `ksp-logging-lib 0.1.2` sont complétées dans Logging sans dépendance inverse vers Config.
### Décision de scission #### Décision de scission
Le `pre.001` ne scinde pas Config : `0.1.3` reste une release unique et `0.1.4` reste réservée à `ksp-app-config-desk`. Le `pre.001` ne scinde pas Config : `0.1.3` reste une release unique et `0.1.4` reste réservée à `ksp-app-config-desk`.
@@ -252,7 +252,7 @@ pre.015-fix.002 tracing Tauri + critères fonctionnels de clôture 0.1.
rel.001 publication stable validée de 0.1.3 rel.001 publication stable validée de 0.1.3
``` ```
## `0.1.4` — Config desktop par défaut ### `0.1.4` — Config desktop par défaut
`0.1.4-pre.001` ouvre désormais cette release par l'audit et le plan détaillé : `0.1.4-pre.001` ouvre désormais cette release par l'audit et le plan détaillé :
@@ -293,7 +293,7 @@ La logique Config reste dans `ksp-config-lib` et le subscriber/runtime `tracing`
`0.1.4-rel.001` publie cette surface sous `0.1.4` stable après validation complète de `pre.019` et de son fix documentaire. `0.1.4-rel.001` publie cette surface sous `0.1.4` stable après validation complète de `pre.019` et de son fix documentaire.
# Règle Git à partir de `0.1.x` ## Règle Git à partir de `0.1.x`
À partir de la première release fonctionnelle, **chaque delta est commité**. À partir de la première release fonctionnelle, **chaque delta est commité**.
@@ -315,9 +315,9 @@ Seul le commit de release stable reçoit le tag :
v0.1.1 v0.1.1
``` ```
# Lifecycle standard d'une release fonctionnelle ## Lifecycle standard d'une release fonctionnelle
## Première prerelease ### Première prerelease
Par défaut : Par défaut :
@@ -332,13 +332,13 @@ Par défaut :
La première prerelease ne doit pas se transformer automatiquement en une grosse phase d'implémentation. La première prerelease ne doit pas se transformer automatiquement en une grosse phase d'implémentation.
## Prereleases intermédiaires ### Prereleases intermédiaires
Chaque prerelease porte un objectif borné et cohérent. Chaque prerelease porte un objectif borné et cohérent.
Une tranche de travail de planification/développement manifestement trop grosse est scindée. La cible de dimensionnement KSP est d'environ 1520 minutes de travail effectif par prerelease ; ce budget est un garde-fou de granularité, pas une raison pour comprimer le périmètre. Une tranche de travail de planification/développement manifestement trop grosse est scindée. La cible de dimensionnement KSP est d'environ 1520 minutes de travail effectif par prerelease ; ce budget est un garde-fou de granularité, pas une raison pour comprimer le périmètre.
## Dernière prerelease ### Dernière prerelease
Par défaut : Par défaut :
@@ -350,7 +350,7 @@ Par défaut :
- prompt de la release suivante ; - prompt de la release suivante ;
- vérification de cohérence des versions. - vérification de cohérence des versions.
# Série `0.2.x` — accès Solana, Wallet et contrats initiaux ## Série `0.2.x` — accès Solana, Wallet et contrats initiaux
`0.2.0` est publiée stable par `0.2.0-rel.001`. `pre.002` a fixé le début de la séquence fonctionnelle suivante et `pre.003` en a réalisé l'audit final de cohérence : `0.2.0` est publiée stable par `0.2.0-rel.001`. `pre.002` a fixé le début de la séquence fonctionnelle suivante et `pre.003` en a réalisé l'audit final de cohérence :
@@ -372,7 +372,7 @@ Par défaut :
`0.2.1-pre.001` a appliqué le gate de sizing et refusé le scope HTTP monolithique initial : l'inventaire du 2026-08-17 contient 52 méthodes courantes et 14 méthodes Deprecated historiques. Ce premier delta avait réparti la couverture typée sur `0.2.1``0.2.6`. `0.2.1-pre.001-fix.001` recalibre ensuite les 48 méthodes restantes sur trois releases complémentaires `0.2.2``0.2.4`, soit trois sessions nominales au maximum si chaque release utilise sa session complète. Si une release se clôt plus vite que prévu, la même session peut enchaîner la suivante après clôture complète de la précédente et nouveau gate de sizing positif. Un Wallet Desk utile doit pouvoir lire le solde du wallet : `getBalance` fait donc partie des quatre canaris de la foundation `0.2.1`, avant Wallet. Les transports live arrivent ensuite ; Interface/Program restent préparés avant les couches de données décodées. `0.2.1-pre.001` a appliqué le gate de sizing et refusé le scope HTTP monolithique initial : l'inventaire du 2026-08-17 contient 52 méthodes courantes et 14 méthodes Deprecated historiques. Ce premier delta avait réparti la couverture typée sur `0.2.1``0.2.6`. `0.2.1-pre.001-fix.001` recalibre ensuite les 48 méthodes restantes sur trois releases complémentaires `0.2.2``0.2.4`, soit trois sessions nominales au maximum si chaque release utilise sa session complète. Si une release se clôt plus vite que prévu, la même session peut enchaîner la suivante après clôture complète de la précédente et nouveau gate de sizing positif. Un Wallet Desk utile doit pouvoir lire le solde du wallet : `getBalance` fait donc partie des quatre canaris de la foundation `0.2.1`, avant Wallet. Les transports live arrivent ensuite ; Interface/Program restent préparés avant les couches de données décodées.
## `0.2.1` — HTTP transport foundation réduite ### `0.2.1` — HTTP transport foundation réduite
Mission : créer `ksp-onchain-transport-lib` avec la foundation HTTP JSON-RPC indépendante de Config/Store/Program, le registry documentaire exhaustif, la résilience/pool et quatre méthodes typed canari. Mission : créer `ksp-onchain-transport-lib` avec la foundation HTTP JSON-RPC indépendante de Config/Store/Program, le registry documentaire exhaustif, la résilience/pool et quatre méthodes typed canari.
@@ -380,7 +380,7 @@ Inclure : settings publics ; endpoint/provider/cluster ; pool logique ; rôles/c
Le plan détaillé clôturé est `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`. `0.2.1-rel.001` publie la foundation après validation des canaries de complétude, du smoke Devnet opt-in Config -> Transport, des README/USAGE et des graphes Cargo. Le smoke cross-crates hébergé dans Config est transitoire et devra migrer vers une future surface dintégration/orchestration ; aucun futur smoke `Config + autre crate` ne doit prendre Config comme destination générale. Un appel raw/générique ne compte pas comme couverture typée des méthodes reportées. Le plan détaillé clôturé est `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`. `0.2.1-rel.001` publie la foundation après validation des canaries de complétude, du smoke Devnet opt-in Config -> Transport, des README/USAGE et des graphes Cargo. Le smoke cross-crates hébergé dans Config est transitoire et devra migrer vers une future surface dintégration/orchestration ; aucun futur smoke `Config + autre crate` ne doit prendre Config comme destination générale. Un appel raw/générique ne compte pas comme couverture typée des méthodes reportées.
## `0.2.2` à `0.2.4` — complétude HTTP Solana ### `0.2.2` à `0.2.4` — complétude HTTP Solana
- `0.2.2` : 5 Accounts restants + 5 Tokens + 12 Cluster restants = 22 méthodes ; - `0.2.2` : 5 Accounts restants + 5 Tokens + 12 Cluster restants = 22 méthodes ;
- `0.2.3` : 11 Transactions, y compris write/submission technique et no-resend ambigu ; - `0.2.3` : 11 Transactions, y compris write/submission technique et no-resend ambigu ;
@@ -396,7 +396,7 @@ Chaque `pre.001` réaudite la documentation officielle actuelle. Les méthodes D
`0.2.4-pre.001` réaudite le même jour l'inventaire HTTP officiel et la baseline runtime actuelle : les 15 méthodes réservées restent exactement 10 Blocks + 5 Economics, la navigation Deprecated reste à 14 historiques et Agave stable `v4.2.1` confirme les overloads/limites/extensions sensibles (`getBlock` legacy, `getBlocks`, plafond 500_000, performance samples 720, `commissionBps`). Le gate de sizing est positif sans split de release. `pre.002``pre.008` livrent ensuite les DTOs/wires et les 15 wrappers ; `pre.008-fix.001` corrige uniquement la conformité Clippy. `pre.009` réaudite l'index officiel et les SIMDs HTTP sensibles, confirme l'égalité exacte des ensembles 52 current + 14 Deprecated avec le registre, ajoute les canaries de wrapper/compliance globales, étend le smoke Transport aux familles Blocks/Economics et synchronise la documentation. `pre.009-fix.001` finalise ensuite le prompt Wallet sans changement Cargo. `0.2.4-rel.001` publie la surface stable après validation du workspace et des deux smokes Devnet. Le plan détaillé clôturé est `docs/plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md`. `0.2.4-pre.001` réaudite le même jour l'inventaire HTTP officiel et la baseline runtime actuelle : les 15 méthodes réservées restent exactement 10 Blocks + 5 Economics, la navigation Deprecated reste à 14 historiques et Agave stable `v4.2.1` confirme les overloads/limites/extensions sensibles (`getBlock` legacy, `getBlocks`, plafond 500_000, performance samples 720, `commissionBps`). Le gate de sizing est positif sans split de release. `pre.002``pre.008` livrent ensuite les DTOs/wires et les 15 wrappers ; `pre.008-fix.001` corrige uniquement la conformité Clippy. `pre.009` réaudite l'index officiel et les SIMDs HTTP sensibles, confirme l'égalité exacte des ensembles 52 current + 14 Deprecated avec le registre, ajoute les canaries de wrapper/compliance globales, étend le smoke Transport aux familles Blocks/Economics et synchronise la documentation. `pre.009-fix.001` finalise ensuite le prompt Wallet sans changement Cargo. `0.2.4-rel.001` publie la surface stable après validation du workspace et des deux smokes Devnet. Le plan détaillé clôturé est `docs/plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md`.
## `0.2.5` — Wallet foundation ### `0.2.5` — Wallet foundation
Mission : créer `ksp-wallet-lib` et le format natif interopérable `.kspwallet`, indépendants de Config/Transport/Tauri/ExecutionPolicy. Mission : créer `ksp-wallet-lib` et le format natif interopérable `.kspwallet`, indépendants de Config/Transport/Tauri/ExecutionPolicy.
@@ -420,11 +420,11 @@ La release fournit `docs/formats/KSPWALLET_V1.md` comme spécification séparée
`0.2.5-pre.007` complète l'administration native capability-bound : OWNER signe des messages Solana sans getter secret, modifie alias/notes, change son password ou celui de VIEW et peut disable/recreate VIEW avec rekey metadata fort ; VIEW ne peut que tourner son propre credential en rewrappant le même `K_metadata`. Les mutations sont staged puis remplacent le fichier uniquement si la destination courante correspond encore à l'enveloppe authentifiée attendue ; un handle stale ou une mauvaise cible reçoit `wallet.state_conflict`. Ce garde-fou ne prétend pas fournir un CAS filesystem portable ni un anti-rollback externe. La keypair reste encapsulée dans Wallet et aucune nouvelle dépendance tierce n'est ajoutée. `pre.008` ajoute ensuite les adapters `solana_cli_json` et `solana_keypair_base58`, linspection sûre limitée à Pubkey+format, limport no-clobber vers un nouveau `.kspwallet` et lexport OWNER en mémoire/fichier. La source dimport reste inchangée, VIEW nexporte jamais, aucun `bs58` direct nest ajouté puisque `solana-keypair 3.1.2` possède déjà le codec Base58 complet. `pre.009` ferme ensuite le gate adversarial/security/interoperability/compliance : canaris de tampering et non-oracle, reproduction indépendante des vecteurs, audit des frontières et graphes Cargo. `pre.010` finalise README/USAGE, la spec, les graphes, la matrice de clôture et le prompt `0.2.6`. Les fixes `pre.010-fix.001``fix.003` mettent le Dalek direct à `3.0.0`, normalisent le Rust workspace, ajoutent l'audit structurel Python et réconcilient celui-ci avec rustfmt. Le checkpoint final est vert ; `0.2.5-rel.001` publie cette surface sans nouvelle capacité runtime. `0.2.5-pre.007` complète l'administration native capability-bound : OWNER signe des messages Solana sans getter secret, modifie alias/notes, change son password ou celui de VIEW et peut disable/recreate VIEW avec rekey metadata fort ; VIEW ne peut que tourner son propre credential en rewrappant le même `K_metadata`. Les mutations sont staged puis remplacent le fichier uniquement si la destination courante correspond encore à l'enveloppe authentifiée attendue ; un handle stale ou une mauvaise cible reçoit `wallet.state_conflict`. Ce garde-fou ne prétend pas fournir un CAS filesystem portable ni un anti-rollback externe. La keypair reste encapsulée dans Wallet et aucune nouvelle dépendance tierce n'est ajoutée. `pre.008` ajoute ensuite les adapters `solana_cli_json` et `solana_keypair_base58`, linspection sûre limitée à Pubkey+format, limport no-clobber vers un nouveau `.kspwallet` et lexport OWNER en mémoire/fichier. La source dimport reste inchangée, VIEW nexporte jamais, aucun `bs58` direct nest ajouté puisque `solana-keypair 3.1.2` possède déjà le codec Base58 complet. `pre.009` ferme ensuite le gate adversarial/security/interoperability/compliance : canaris de tampering et non-oracle, reproduction indépendante des vecteurs, audit des frontières et graphes Cargo. `pre.010` finalise README/USAGE, la spec, les graphes, la matrice de clôture et le prompt `0.2.6`. Les fixes `pre.010-fix.001``fix.003` mettent le Dalek direct à `3.0.0`, normalisent le Rust workspace, ajoutent l'audit structurel Python et réconcilient celui-ci avec rustfmt. Le checkpoint final est vert ; `0.2.5-rel.001` publie cette surface sans nouvelle capacité runtime.
## `0.2.6` — Wallet Desk ### `0.2.6` — Wallet Desk
Mission : créer `ksp-app-wallet-desk` comme application Tauri mince de composition `Config + Wallet + Transport HTTP`, sans déplacer la cryptographie Wallet, la résolution Config ni le transport Solana dans le frontend. Le plan actif et le découpage fin restent dans `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`. Mission : créer `ksp-app-wallet-desk` comme application Tauri mince de composition `Config + Wallet + Transport HTTP`, sans déplacer la cryptographie Wallet, la résolution Config ni le transport Solana dans le frontend. Le plan détaillé clôturé est `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`.
État fonctionnel déjà acquis : Trajectoire exécutée :
- `pre.001``pre.004` : sizing, shell desktop, `std.wallet`, composite Wallet Desk, répertoires Config et inventory locked `.kspwallet` root-scoped ; - `pre.001``pre.004` : sizing, shell desktop, `std.wallet`, composite Wallet Desk, répertoires Config et inventory locked `.kspwallet` root-scoped ;
- `pre.005``pre.006` : création native, `WalletSession`, unlock VIEW/OWNER manuel et via candidats `KSP_SECRET_WALLET_PASS_*` résolus exclusivement par Config ; - `pre.005``pre.006` : création native, `WalletSession`, unlock VIEW/OWNER manuel et via candidats `KSP_SECRET_WALLET_PASS_*` résolus exclusivement par Config ;
@@ -433,7 +433,7 @@ Mission : créer `ksp-app-wallet-desk` comme application Tauri mince de composit
Les correctifs de ces tranches restent tracés dans `deltas/0.2.6/` et ne sont pas dupliqués ici. Les correctifs de ces tranches restent tracés dans `deltas/0.2.6/` et ne sont pas dupliqués ici.
Trajectoire restante : Clôture exécutée :
```text ```text
pre.009 administration OWNER alias/notes + recovery wallet.state_conflict pre.009 administration OWNER alias/notes + recovery wallet.state_conflict
@@ -449,21 +449,21 @@ pre.018 documentation finale, validations, prompt 0.2.7 et cargo tauri build en
rel.001 publication stable 0.2.6 rel.001 publication stable 0.2.6
``` ```
`pre.017` est désormais matérialisé et validé : la migration V1 -> V2 est explicite, OWNER-authentifiée et séparée de toute ouverture normale, avec copie no-clobber et remplacement in-place stale-protected. `pre.018` matérialise la candidate finale : README/USAGE Wallet Desk, documentation/compliance, runtime packagé commun à Config Desk/Wallet Desk avec Config resources + racine user-writable, et prompt `0.2.7`. Le build Wallet Desk et `rel.001` restent les gates finaux. `pre.017` a matérialisé et validé la migration V1 -> V2 explicite, OWNER-authentifiée et séparée de toute ouverture normale, avec copie no-clobber et remplacement in-place stale-protected. `pre.018` a ensuite fermé la candidate : README/USAGE Wallet Desk, documentation/compliance, runtime packagé commun à Config Desk/Wallet Desk avec resources Config + racine user-writable et prompt `0.2.7`. `pre.018-fix.001` a corrigé le canari downership Config et aligné les signaux Cargo/npm/Tauri ; le gate complet puis le build final Wallet Desk ont été validés, avec production des bundles Linux `.deb`, `.rpm` et `.AppImage`. `pre.018-fix.002`, documentaire uniquement, a renforcé le prompt autonome `0.2.7` sans invalider la preuve technique. `0.2.6-rel.001` publie désormais cette surface stable sans nouvelle capacité runtime.
La tranche `pre.014` est réservée aux défauts visuels/templating observés en usage réel, notamment les scrollbars occasionnelles du splashscreen ; son contenu précis sera borné à partir du retour opérateur avant implémentation. `ROADMAP.md` reste synthétique et `CHANGELOG.md` n'est synchronisé qu'à la phase documentaire finale. La tranche historique `pre.014` a traité les défauts visuels/templating observés en usage réel, notamment le splashscreen et le layout desktop. Les décisions finales CWD/resources ont été fermées en `pre.018`. `ROADMAP.md` reste synthétique et `CHANGELOG.md` ne contient que les releases stables.
## `0.2.7` — WebSocket Solana standard ### `0.2.7` — WebSocket Solana standard
Mission : couvrir la surface WebSocket standard officielle ciblée. Mission : couvrir la surface WebSocket standard officielle ciblée.
Une URL peut avoir plusieurs sessions physiques ; une session peut avoir plusieurs subscriptions. Un pool automatique de sessions est reporté jusqu'à besoin concret. Une URL peut avoir plusieurs sessions physiques ; une session peut avoir plusieurs subscriptions. Un pool automatique de sessions est reporté jusqu'à besoin concret.
## `0.2.8` — Helius LaserStream WebSocket ### `0.2.8` — Helius LaserStream WebSocket
Mission : étendre le moteur WebSocket standard avec les opérations/filtres/capabilities Helius ciblés sans copier le client. Mission : étendre le moteur WebSocket standard avec les opérations/filtres/capabilities Helius ciblés sans copier le client.
## `0.2.9` — Yellowstone gRPC standard ### `0.2.9` — Yellowstone gRPC standard
Mission : introduire un backend Yellowstone standard/provider-neutral. Mission : introduire un backend Yellowstone standard/provider-neutral.
@@ -471,7 +471,7 @@ Le `pre.001` est un gate de sizing : inventorier toute la surface normative cibl
Les profiles/adapters Helius/Triton/ERPC/Chainstack/Shyft sont reportés après les priorités fondatrices. Les profiles/adapters Helius/Triton/ERPC/Chainstack/Shyft sont reportés après les priorités fondatrices.
## `0.2.10` / `0.2.11` — Off-chain price + app ### `0.2.10` / `0.2.11` — Off-chain price + app
`0.2.10` introduit `ksp-offchain-transport-lib` avec au minimum SOL/USD et SOL/EUR via une abstraction indépendante du premier provider. `0.2.10` introduit `ksp-offchain-transport-lib` avec au minimum SOL/USD et SOL/EUR via une abstraction indépendante du premier provider.
@@ -479,19 +479,19 @@ Les profiles/adapters Helius/Triton/ERPC/Chainstack/Shyft sont reportés après
Metadata HTTP/IPFS/Arweave viendra au premier besoin Metadata réel. Metadata HTTP/IPFS/Arweave viendra au premier besoin Metadata réel.
## `0.2.12` — Interface foundation ### `0.2.12` — Interface foundation
`ksp-interface-lib` devient la façade wire officielle et expose une API publique wire utilisable par les implementations officielles et externes. `ksp-interface-lib` devient la façade wire officielle et expose une API publique wire utilisable par les implementations officielles et externes.
Aucune `ksp-interface-api` séparée n'est retenue pour l'instant. Aucune `ksp-interface-api` séparée n'est retenue pour l'instant.
## `0.2.13` — Program API foundation ### `0.2.13` — Program API foundation
Introduire `ksp-program-api`, sans suffixe `-lib`, comme contrat d'extension Program. Introduire `ksp-program-api`, sans suffixe `-lib`, comme contrat d'extension Program.
`ksp-program-lib` et les vertical slices réels arrivent plus tard. `ksp-program-lib` et les vertical slices réels arrivent plus tard.
# Architecture durable : RAW -> CORE -> DECODE -> SPECIALIZED ## Architecture durable : RAW -> CORE -> DECODE -> SPECIALIZED
La chaîne de données est : La chaîne de données est :
@@ -506,7 +506,7 @@ RAW et CORE ne nécessitent aucun decoder Program.
`RAW -> CORE` est une normalisation générique Solana ; le premier decoder intervient à `CORE -> DECODE`. `RAW -> CORE` est une normalisation générique Solana ; le premier decoder intervient à `CORE -> DECODE`.
# Série `0.3.x` — RAW / acquisition persistée ## Série `0.3.x` — RAW / acquisition persistée
Début décidé : Début décidé :
@@ -521,7 +521,7 @@ La suite de la série termine la couche RAW avec worker/service live et outils d
`0.3.1` ne doit pas créer par anticipation les modèles/tables DECODE/SPECIALIZED. `0.3.1` ne doit pas créer par anticipation les modèles/tables DECODE/SPECIALIZED.
# Série CORE suivante ## Série CORE suivante
Objectif : rendre CORE exploitable sans aucun decoder Program : Objectif : rendre CORE exploitable sans aucun decoder Program :
@@ -534,7 +534,7 @@ RAW persisted
-> CORE inspection/control app -> CORE inspection/control app
``` ```
# Séries DECODE/SPECIALIZED/EXECUTION suivantes ## Séries DECODE/SPECIALIZED/EXECUTION suivantes
À partir du décodage, KSP progresse par vertical slices complets et non par grandes couches de crates isolées : À partir du décodage, KSP progresse par vertical slices complets et non par grandes couches de crates isolées :
@@ -571,7 +571,7 @@ Un programme satellite nécessaire reste dans son groupe protocolaire : Pump fee
SPM est reporté au décodage généraliste ultérieur. SPM est reporté au décodage généraliste ultérieur.
# Market Desk ## Market Desk
Après les DEX prioritaires, introduire une petite `ksp-app-market-desk` consommant les projections KSP pour afficher tokens, pools, liquidité, trades, prix, volumes et OHLC. Après les DEX prioritaires, introduire une petite `ksp-app-market-desk` consommant les projections KSP pour afficher tokens, pools, liquidité, trades, prix, volumes et OHLC.
@@ -579,17 +579,17 @@ Après Jupiter/OKX, enrichir la même app avec routes, legs, DEX impliqués, fee
L'app ne réimplémente pas les SDK/protocoles DEX ; elle consomme les faits SPECIALIZED normalisés. L'app ne réimplémente pas les SDK/protocoles DEX ; elle consomme les faits SPECIALIZED normalisés.
# Discipline de sizing ## Discipline de sizing
Chaque prerelease vise environ 1520 minutes de travail effectif. Chaque prerelease vise environ 1520 minutes de travail effectif.
Chaque release concrète doit pouvoir être ouverte et clôturée dans une seule session de chat. Si `pre.001` montre que ce n'est pas réaliste, scinder la release avant implémentation fonctionnelle lourde. Chaque release concrète doit pouvoir être ouverte et clôturée dans une seule session de chat. Si `pre.001` montre que ce n'est pas réaliste, scinder la release avant implémentation fonctionnelle lourde.
# Progression de la série `0.1.x` ## Progression de la série `0.1.x`
Les releases `0.1.1` à `0.1.4` sont stables et leurs plans/prompts restent historiques. Les releases `0.1.1` à `0.1.4` sont stables et leurs plans/prompts restent historiques.
# Clôture stable de `0.2.0` et ouverture de `0.2.1` ## Clôture stable de `0.2.0` et ouverture de `0.2.1`
`0.2.0` a été ouverte par : `0.2.0` a été ouverte par :

View File

@@ -1,8 +1,10 @@
<!-- file: docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md --> <!-- file: docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md -->
<!-- version: 35 --> <!-- version: 36 -->
# Plan `0.2.6` — Wallet Desk # Plan `0.2.6` — Wallet Desk
> **Statut : clôturé par `0.2.6-rel.001`.** Ce document reste la trace détaillée de construction de Wallet Desk et de `.kspwallet` V2. La prochaine release active est `0.2.7`, ouverte par `prompts/012-V0_2_7_START_PROMPT.md`.
## 1. Objet et statut de `0.2.6-pre.001` ## 1. Objet et statut de `0.2.6-pre.001`
`0.2.6` crée `crates/ksp-app-wallet-desk`, une application Tauri spécialisée et mince qui valide la composition réelle : `0.2.6` crée `crates/ksp-app-wallet-desk`, une application Tauri spécialisée et mince qui valide la composition réelle :
@@ -1767,7 +1769,7 @@ Les canaris `pre.017` couvrent migration mémoire, conservation identité/metada
### `pre.018` — documentation finale, runtime packagé et candidate build ### `pre.018` — documentation finale, runtime packagé et candidate build
**Statut : candidate matérialisée ; validations opérateur et build final encore à exécuter.** **Statut : candidate validée ; le gate complet et le build final ont été fermés par `pre.018-fix.001`, puis `pre.018-fix.002` a renforcé uniquement le prompt de reprise.**
Cette tranche ferme la stratégie CWD/resources release qui restait ouverte depuis le polish desktop : Cette tranche ferme la stratégie CWD/resources release qui restait ouverte depuis le polish desktop :
@@ -1791,25 +1793,26 @@ README/USAGE Config Desk synchronisés sur le runtime packagé
docs/validation 0.2.6 finalisée jusqu'au gate opérateur docs/validation 0.2.6 finalisée jusqu'au gate opérateur
règles KSP packaging/CWD durables règles KSP packaging/CWD durables
ROADMAP / functional sequence / indexes mis à jour globalement ROADMAP / functional sequence / indexes mis à jour globalement
CHANGELOG audité mais volontairement inchangé jusqu'à rel.001 CHANGELOG réservé à rel.001 puis synchronisé avec la publication stable
versions Cargo/package/Tauri alignées sur pre.018 versions Cargo/package/Tauri alignées sur la candidate, puis sur la release stable en rel.001
prompt de démarrage 0.2.7 WebSocket finalisé prompt de démarrage 0.2.7 WebSocket finalisé
canaris resources/packaging ajoutés canaris resources/packaging ajoutés
``` ```
Le checkpoint `pre.017` de référence est vert : fmt/audit/check/clippy/workspace tests passent, `ksp-wallet-lib` compte 84 tests passés + 1 benchmark ignoré, et le parcours Tauri confirme un import créant réellement un V2 puis un `getBalance` Devnet réussi. Le checkpoint `pre.017` de référence est vert : fmt/audit/check/clippy/workspace tests passent, `ksp-wallet-lib` compte 84 tests passés + 1 benchmark ignoré, et le parcours Tauri confirme un import créant réellement un V2 puis un `getBalance` Devnet réussi.
Après application de `pre.018`, toutes les validations Rust, le parcours `cargo tauri dev`, les éventuels smokes live et audits de dépendances sont exécutés avant le build. `(cd crates/ksp-app-wallet-desk && cargo tauri build)` demeure **l'absolue dernière opération de validation**. Si une correction technique apparaît, utiliser `pre.018-fix.NNN` avant de rejouer le gate depuis le début. Le premier passage `pre.018` a révélé un faux positif du canari downership Config, corrigé par `pre.018-fix.001` sans relâcher la règle. Après ce fix, `cargo fmt`, audit Python, `cargo check`, Clippy, les tests ciblés, `cargo test --workspace` puis `(cd crates/ksp-app-wallet-desk && cargo tauri build)` ont tous réussi ; ce build était bien la dernière opération et a produit les bundles Linux `.deb`, `.rpm` et `.AppImage` en `0.2.6-pre.18.fix.1`. `pre.018-fix.002` ne touche quaux documents et renforce le prompt `0.2.7`.
### `rel.001` — publication stable ### `rel.001` — publication stable
Après preuves finales : Après preuves finales acquises :
```text ```text
version stable 0.2.6 version stable 0.2.6
commit rel.001 commit v0.2.6-rel.001
publication/tag v0.2.6 selon workflow KSP tag stable v0.2.6 selon workflow KSP
aucune nouvelle fonctionnalité introduite dans rel.001 aucune nouvelle fonctionnalité introduite dans rel.001
prochaine tranche 0.2.7-pre.001 via prompt 012
``` ```
## 25. Validation continue ## 25. Validation continue
@@ -1881,17 +1884,17 @@ RPC direct depuis frontend
prix offchain pendant 0.2.6 prix offchain pendant 0.2.6
``` ```
## 27. TODO `0.2.12` — intégration prix offchain ## 27. TODO `0.2.11` — intégration prix offchain
La visualisation de prix reste hors `0.2.6`. La visualisation de prix reste hors `0.2.6`.
Une application spécialisée doit d'abord valider les sources offchain, normalisation, cache, rafraîchissement et UX. Ensuite `0.2.12` intégrera cette capacité dans Wallet Desk via le composant partagé retenu, sans dupliquer la logique de récupération de prix. Une application spécialisée doit d'abord valider les sources offchain, normalisation, cache, rafraîchissement et UX. Ensuite `0.2.11` intégrera cette capacité dans Wallet Desk via le composant partagé retenu, sans dupliquer la logique de récupération de prix.
Aucune API fictive de prix n'est introduite dans Wallet Desk en `0.2.6`. Aucune API fictive de prix n'est introduite dans Wallet Desk en `0.2.6`.
## 28. Critères de sortie `0.2.6` ## 28. Critères de sortie `0.2.6`
La release stable est clôturable si : Les critères de sortie suivants sont satisfaits au gate final `pre.018-fix.001` puis publiés par `rel.001` :
- `ksp-app-wallet-desk` existe comme application Tauri spécialisée ; - `ksp-app-wallet-desk` existe comme application Tauri spécialisée ;
- le gabarit frontend réutilise Bootstrap, Font Awesome, DataTables, DataTables Select, SimpleBar et resize-observer-polyfill ; - le gabarit frontend réutilise Bootstrap, Font Awesome, DataTables, DataTables Select, SimpleBar et resize-observer-polyfill ;
@@ -1914,7 +1917,7 @@ La release stable est clôturable si :
- README/USAGE, validation, roadmap et prompt `0.2.7` sont synchronisés ; - README/USAGE, validation, roadmap et prompt `0.2.7` sont synchronisés ;
- le build Tauri final est vert et exécuté en dernière opération. - le build Tauri final est vert et exécuté en dernière opération.
## 29. Suite après `pre.001-fix.002` ## 29. Addendum historique `pre.001-fix.002`
Les validations opérateur de `pre.001` sont vertes. `pre.001-fix.001` puis `pre.001-fix.002` sont des correctifs documentaires : ils ne modifient pas `workspace.package.version`, qui reste `0.2.6-pre.1`. `pre.001-fix.002` corrige la règle et le plan pour supprimer toute validation frontend standalone par script npm et réserver les commandes npm directes à l'installation/mise à jour des dépendances. Les validations opérateur de `pre.001` sont vertes. `pre.001-fix.001` puis `pre.001-fix.002` sont des correctifs documentaires : ils ne modifient pas `workspace.package.version`, qui reste `0.2.6-pre.1`. `pre.001-fix.002` corrige la règle et le plan pour supprimer toute validation frontend standalone par script npm et réserver les commandes npm directes à l'installation/mise à jour des dépendances.
@@ -1928,7 +1931,7 @@ v0.2.6-pre.001-fix.002
Après application/commit du fix documentaire, `pre.002` démarre la crate Tauri et le shell complet du gabarit, avec Bootstrap, Font Awesome, DataTables/Select, SimpleBar, resize-observer-polyfill, splash/main et logging bridge. Après application/commit du fix documentaire, `pre.002` démarre la crate Tauri et le shell complet du gabarit, avec Bootstrap, Font Awesome, DataTables/Select, SimpleBar, resize-observer-polyfill, splash/main et logging bridge.
## `pre.014` — polish desktop partagé et lancement Tauri multi-app ## 30. Addendum historique `pre.014` — polish desktop partagé et lancement Tauri multi-app
La tranche harmonise Config Desk et Wallet Desk sans modifier les contrats Wallet métier : La tranche harmonise Config Desk et Wallet Desk sans modifier les contrats Wallet métier :
@@ -1943,24 +1946,26 @@ Palette : Wallet Desk revient sur la palette claire de référence Config Desk
Tauri : lancement crate-local obligatoire dans le workspace multi-app Tauri : lancement crate-local obligatoire dans le workspace multi-app
``` ```
La cause du mélange observé Config-Vite / Wallet-backend est explicitement corrigée : `-c/--config` fusionne une configuration avec le projet Tauri déjà découvert ; il ne choisit pas la crate. Les commandes de validation visuelle sont donc : La cause du mélange observé Config-Vite / Wallet-backend est explicitement corrigée : `-c/--config` fusionne une configuration avec le projet Tauri déjà découvert ; il ne choisit pas la crate. Les commandes de validation visuelle sont donc crate-locales :
```bash ```bash
(cd crates/ksp-app-config-desk && \
KSP_DESK_SPLASH_FADE_IN_MS=1500 \ KSP_DESK_SPLASH_FADE_IN_MS=1500 \
KSP_DESK_SPLASH_MINIMUM_MS=6000 \ KSP_DESK_SPLASH_MINIMUM_MS=6000 \
KSP_DESK_SPLASH_FADE_OUT_MS=1500 \ KSP_DESK_SPLASH_FADE_OUT_MS=1500 \
bash -lc 'cd crates/ksp-app-config-desk && cargo tauri dev' cargo tauri dev)
(cd crates/ksp-app-wallet-desk && \
KSP_DESK_SPLASH_FADE_IN_MS=1500 \ KSP_DESK_SPLASH_FADE_IN_MS=1500 \
KSP_DESK_SPLASH_MINIMUM_MS=6000 \ KSP_DESK_SPLASH_MINIMUM_MS=6000 \
KSP_DESK_SPLASH_FADE_OUT_MS=1500 \ KSP_DESK_SPLASH_FADE_OUT_MS=1500 \
KSP_WALLETS_DIRECTORY=var/wallet-desk-pre014 \ KSP_WALLETS_DIRECTORY=var/wallet-desk-pre014 \
bash -lc 'cd crates/ksp-app-wallet-desk && cargo tauri dev' cargo tauri dev)
``` ```
À ce stade de `pre.014`, le build Tauri de production était encore reporté à `pre.015`. Cette décision historique est **superseded par lextension décidée en `pre.015`** : le build final est désormais réservé à `pre.018` et doit demeurer labsolue dernière opération. À ce stade de `pre.014`, le build Tauri de production était encore reporté à `pre.015`. Cette décision historique est **superseded par lextension décidée en `pre.015`** : le build final est désormais réservé à `pre.018` et doit demeurer labsolue dernière opération.
### Correctif `0.2.6-pre.014-fix.001` — layout desktop et canari durable ### 30.1 Correctif `0.2.6-pre.014-fix.001` — layout desktop et canari durable
Le retour opérateur de `pre.014` confirme le lancement Tauri crate-local mais révèle plusieurs écarts purement gabarit. Le correctif conserve `pre.014` comme tranche de polish et applique les décisions suivantes : Le retour opérateur de `pre.014` confirme le lancement Tauri crate-local mais révèle plusieurs écarts purement gabarit. Le correctif conserve `pre.014` comme tranche de polish et applique les décisions suivantes :

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/000-README.md --> <!-- file: docs/validation/000-README.md -->
<!-- version: 16 --> <!-- version: 17 -->
# Validations KSP # Validations KSP
@@ -17,4 +17,4 @@ Documents :
- [`006-V0_2_3_HTTP_TRANSACTIONS.md`](006-V0_2_3_HTTP_TRANSACTIONS.md) — matrice finale validée de `0.2.3`, 11 wrappers Transactions, sécurité write/simulation, réaudit 52+14, `KSP-TRANSPORT-007` 37/37, graphes Cargo et deux smokes Devnet passés avant publication stable. - [`006-V0_2_3_HTTP_TRANSACTIONS.md`](006-V0_2_3_HTTP_TRANSACTIONS.md) — matrice finale validée de `0.2.3`, 11 wrappers Transactions, sécurité write/simulation, réaudit 52+14, `KSP-TRANSPORT-007` 37/37, graphes Cargo et deux smokes Devnet passés avant publication stable.
- [`007-V0_2_4_HTTP_FINAL_COMPLIANCE.md`](007-V0_2_4_HTTP_FINAL_COMPLIANCE.md) — matrice finale validée de `0.2.4`, inventaire exact 52 current + 14 Deprecated, preuve typed 52/52, audit SIMD final, `KSP-TRANSPORT-007`, workspace complet et deux smokes Devnet passés avant publication stable. - [`007-V0_2_4_HTTP_FINAL_COMPLIANCE.md`](007-V0_2_4_HTTP_FINAL_COMPLIANCE.md) — matrice finale validée de `0.2.4`, inventaire exact 52 current + 14 Deprecated, preuve typed 52/52, audit SIMD final, `KSP-TRANSPORT-007`, workspace complet et deux smokes Devnet passés avant publication stable.
- [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.5`, threat model V1, canaris adversariaux, reproduction externe des vecteurs, audit de frontières, normalisation Rust/audit structurel, graphes Cargo et checkpoint final `pre.010-fix.003` vert. - [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.5`, threat model V1, canaris adversariaux, reproduction externe des vecteurs, audit de frontières, normalisation Rust/audit structurel, graphes Cargo et checkpoint final `pre.010-fix.003` vert.
- [`009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](009-V0_2_6_WALLET_DESK_COMPLIANCE.md) — matrice de compliance ouverte en `0.2.6-pre.013`, étendue aux wires V1/V2, à la migration explicite et au runtime Tauri packagé ; `pre.018` y matérialise la candidate finale, le dernier build opérateur restant à enregistrer avant `rel.001`. - [`009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](009-V0_2_6_WALLET_DESK_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.6`, couvrant Wallet Desk, les wires V1/V2, la migration explicite, le runtime Tauri packagé, les frontières sécurité/ownership et le gate opérateur `pre.018-fix.001` avec build final Linux vert.

View File

@@ -1,11 +1,11 @@
<!-- file: docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md --> <!-- file: docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md -->
<!-- version: 6 --> <!-- version: 7 -->
# Validation `0.2.6` — Wallet Desk integration / compliance / security # Validation `0.2.6` — Wallet Desk integration / compliance / security
## 1. Objet ## 1. Objet
Cette matrice est ouverte par `0.2.6-pre.013` comme preuve durable de composition et de conformité de `ksp-app-wallet-desk`. Le calendrier a été étendu après `pre.014` : `pre.015` introduit le wire V2, `pre.016` les APIs génériques/versionnées, `pre.017` migration/régression, puis `pre.018` porte la clôture documentaire et le dernier build Tauri. Cette matrice a été ouverte par `0.2.6-pre.013` et est désormais **clôturée positivement par `0.2.6-rel.001`** comme preuve durable de composition et de conformité de `ksp-app-wallet-desk`. Le calendrier a été étendu après `pre.014` : `pre.015` introduit le wire V2, `pre.016` les APIs génériques/versionnées, `pre.017` migration/régression, puis `pre.018` porte la clôture documentaire et le dernier build Tauri.
Elle ne remplace ni le plan [`../plans/013-V0_2_6_WALLET_DESK_PLAN.md`](../plans/013-V0_2_6_WALLET_DESK_PLAN.md), ni la matrice Wallet V1 [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md), ni les deltas `0.2.6`. Elle ne remplace ni le plan [`../plans/013-V0_2_6_WALLET_DESK_PLAN.md`](../plans/013-V0_2_6_WALLET_DESK_PLAN.md), ni la matrice Wallet V1 [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md), ni les deltas `0.2.6`.
@@ -238,7 +238,7 @@ cargo test --workspace : BLOCKED par un faux positif du canari Logging global
Le blocage workspace est limité à `ksp-logging-lib/tests/ownership.rs::workspace_crates_do_not_bypass_ksp_logging_facade` : le scanner voit le littéral `tracing::` dans `release_compliance.rs`, alors que ce littéral est la chaîne recherchée par le canari et non un usage de `tracing`. `pre.013-fix.002` supprime ce littéral statique en construisant le motif à l'exécution, sans modifier le scanner global ni relâcher la politique Logging. Le blocage workspace est limité à `ksp-logging-lib/tests/ownership.rs::workspace_crates_do_not_bypass_ksp_logging_facade` : le scanner voit le littéral `tracing::` dans `release_compliance.rs`, alors que ce littéral est la chaîne recherchée par le canari et non un usage de `tracing`. `pre.013-fix.002` supprime ce littéral statique en construisant le motif à l'exécution, sans modifier le scanner global ni relâcher la politique Logging.
La matrice reste ouverte jusqu'à la preuve opérateur finale de `pre.018`. Les tranches V2 `pre.015``pre.017` sont acquises ; `pre.018` matérialise README/USAGE, runtime packagé et candidate, puis le build Tauri est exécuté en toute dernière opération. La matrice est fermée : les tranches V2 `pre.015``pre.017` sont acquises et `pre.018-fix.001` a fourni la preuve opérateur finale du runtime packagé, du workspace et du build Tauri. `pre.018-fix.002` est documentaire uniquement.
## 12. Intercalation V2 à partir de `pre.015` ## 12. Intercalation V2 à partir de `pre.015`
@@ -296,26 +296,43 @@ Config Desk et Wallet Desk embarquent le même ensemble de huit resources du reg
Les canaris déterministes de la candidate couvrent le seed Config non destructif, la synchronisation des schemas, le rejet d'une destination symlink sur Unix, l'exposition publique du layout packagé, les mappings Tauri des deux Desks et l'absence de ressources mutables/secrètes dans le bundle Wallet Desk. Les canaris déterministes de la candidate couvrent le seed Config non destructif, la synchronisation des schemas, le rejet d'une destination symlink sur Unix, l'exposition publique du layout packagé, les mappings Tauri des deux Desks et l'absence de ressources mutables/secrètes dans le bundle Wallet Desk.
## 15. Gate final opérateur `pre.018` ## 15. Gate final opérateur `pre.018` — preuve acquise
Le delta candidate doit être validé dans cet ordre : Le premier passage `pre.018` a validé `fmt`, audit, `check` et Clippy, mais `cargo test -p ksp-config-lib` a révélé un faux positif du canari downership : le test Wallet Desk recopiait littéralement le nom physique de la ressource dotenv quil cherchait à interdire. `pre.018-fix.001` a remplacé ce littéral par `ksp_config_lib::DEFAULT_DOTENV_PATH`, sans affaiblir le scanner Config, et a aligné les canaris de version sur `env!("CARGO_PKG_VERSION")`.
```bash Le checkpoint opérateur du 22 août 2026 après `pre.018-fix.001` est intégralement vert :
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py ```text
cargo check --workspace cargo fmt --all PASS
cargo clippy --workspace --all-targets audit Rust workspace PASS
cargo test -p ksp-config-lib cargo check --workspace PASS
cargo test -p ksp-wallet-lib cargo clippy --workspace --all-targets PASS, sans warning
cargo test -p ksp-app-config-desk cargo test -p ksp-config-lib PASS ; ownership 5/5 ; public API 15/15
cargo test -p ksp-app-wallet-desk cargo test -p ksp-wallet-lib PASS ; 84 passés / 1 benchmark ignored
cargo test --workspace cargo test -p ksp-app-config-desk PASS ; desktop contract 4/4 ; security 2/2
cargo test --workspace PASS
Wallet Desk desktop_contract 18/18
Wallet Desk desktop_security 12/12
Wallet Desk release_compliance 5/5
``` ```
Le parcours fonctionnel `cargo tauri dev`, les éventuels smokes live et tout audit complémentaire retenu sont exécutés **avant** le build. La dernière opération de validation reste : Le build de production a ensuite été exécuté comme **dernière opération de validation** :
```bash ```bash
(cd crates/ksp-app-wallet-desk && cargo tauri build) (cd crates/ksp-app-wallet-desk && cargo tauri build)
``` ```
`pre.018` ne préjuge pas du résultat de ce build : la preuve opérateur sera enregistrée avant `rel.001`. `CHANGELOG.md` reste volontairement inchangé pendant la prerelease ; l'entrée stable `0.2.6` appartient à la clôture `rel.001` après gate final vert. Résultat : PASS, avec production des trois bundles Linux de candidate `0.2.6-pre.18.fix.1` : `.deb`, `.rpm` et `.AppImage`. `pre.018-fix.002` a ensuite modifié uniquement les documents pour renforcer le contrat de reprise `0.2.7` ; aucun artefact technique ni contrat runtime na été changé.
### Verdict avant publication stable
```text
composition Config + Wallet + HTTP Transport + Logging PASS
frontières IPC/secrets PASS
Wallet V1 lecture + V2 default/runtime/migration PASS
packaging Config/resources user-writable PASS
workspace Rust/Clippy/tests PASS
build Tauri Linux PASS
```
Le verdict de compliance `0.2.6` est donc **positif**. `rel.001` ne doit ajouter aucune capacité ; il aligne les signaux de version sur `0.2.6`, synchronise les documents stables et rejoue le gate stable. Le build stable Wallet Desk doit de nouveau rester labsolue dernière opération avant commit/tag `v0.2.6`.

View File

@@ -1,5 +1,5 @@
<!-- file: prompts/000-README.md --> <!-- file: prompts/000-README.md -->
<!-- version: 20 --> <!-- version: 21 -->
# Prompts KSP # Prompts KSP
@@ -31,5 +31,5 @@ Le prompt générique `0.1.x` a été affiné pendant `0.0.3` puis remplacé par
- [`008-V0_2_3_START_PROMPT.md`](008-V0_2_3_START_PROMPT.md) — prompt préparé par la dernière prerelease de `0.2.2`, destiné à ouvrir `0.2.3 — HTTP Transactions` après publication stable de `0.2.2`; il cible les 11 méthodes Transactions et impose un audit actuel ainsi que la politique no-resend des write submissions. - [`008-V0_2_3_START_PROMPT.md`](008-V0_2_3_START_PROMPT.md) — prompt préparé par la dernière prerelease de `0.2.2`, destiné à ouvrir `0.2.3 — HTTP Transactions` après publication stable de `0.2.2`; il cible les 11 méthodes Transactions et impose un audit actuel ainsi que la politique no-resend des write submissions.
- [`009-V0_2_4_START_PROMPT.md`](009-V0_2_4_START_PROMPT.md) — prompt préparé par `0.2.3-pre.009`, destiné à ouvrir `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale` après publication stable de `0.2.3`; il cible les 15 wrappers restants et impose `KSP-TRANSPORT-007` ainsi qu'un nouvel audit/sizing à `pre.001`. - [`009-V0_2_4_START_PROMPT.md`](009-V0_2_4_START_PROMPT.md) — prompt préparé par `0.2.3-pre.009`, destiné à ouvrir `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale` après publication stable de `0.2.3`; il cible les 15 wrappers restants et impose `KSP-TRANSPORT-007` ainsi qu'un nouvel audit/sizing à `pre.001`.
- [`010-V0_2_5_START_PROMPT.md`](010-V0_2_5_START_PROMPT.md) — prompt préparé par `0.2.4-pre.009` puis finalisé en version 2 par `pre.009-fix.001`, destiné à ouvrir `0.2.5 — Wallet foundation` sur la base stable `v0.2.4`; il impose audit/threat-model/sizing avant choix cryptographiques et cadre `.kspwallet` interopérable, capacités indépendantes VIEW/OWNER, metadata protégées, key slots/rotations, signature, persistence atomique et import/export extensible sans `WalletPolicy`. - [`010-V0_2_5_START_PROMPT.md`](010-V0_2_5_START_PROMPT.md) — prompt préparé par `0.2.4-pre.009` puis finalisé en version 2 par `pre.009-fix.001`, destiné à ouvrir `0.2.5 — Wallet foundation` sur la base stable `v0.2.4`; il impose audit/threat-model/sizing avant choix cryptographiques et cadre `.kspwallet` interopérable, capacités indépendantes VIEW/OWNER, metadata protégées, key slots/rotations, signature, persistence atomique et import/export extensible sans `WalletPolicy`.
- [`011-V0_2_6_START_PROMPT.md`](011-V0_2_6_START_PROMPT.md) — prompt préparé par `0.2.5-pre.010` puis renforcé pendant `pre.010-fix.001``fix.003`, destiné à ouvrir `0.2.6 — Wallet Desk` après le tag stable `v0.2.5`; il impose une première tranche audit/sizing, rappelle les règles Rust/audit structurel, cadre Config composite + Wallet + HTTP `getBalance`, lifecycle VIEW/OWNER, sécurité password/export, validation frontend/Tauri et conserve le TODO `0.2.12` dintégration des prix offchain dans Wallet Desk après validation de la Price Desk spécialisée. - [`011-V0_2_6_START_PROMPT.md`](011-V0_2_6_START_PROMPT.md) — prompt préparé par `0.2.5-pre.010` puis renforcé pendant `pre.010-fix.001``fix.003`, prompt historique consommé pour ouvrir `0.2.6 — Wallet Desk` après le tag stable `v0.2.5`; il impose une première tranche audit/sizing, rappelle les règles Rust/audit structurel, cadre Config composite + Wallet + HTTP `getBalance`, lifecycle VIEW/OWNER, sécurité password/export, validation frontend/Tauri et conserve le TODO `0.2.11` dintégration des prix offchain dans Wallet Desk après validation de la Price Desk spécialisée.
- [`012-V0_2_7_START_PROMPT.md`](012-V0_2_7_START_PROMPT.md) — prompt réaligné par `0.2.6-pre.015` puis renforcé en contrat de reprise autonome par `0.2.6-pre.018-fix.002`; il ouvre `0.2.7 — WebSocket Solana standard` depuis `v0.2.6`, impose les lectures/règles ordonnées, laudit officiel et historique, le threat-model session/subscription/reconnect/backpressure, la matrice de compliance, un gate `pre.001` strict et une prévision souple de prereleases avant toute implémentation lourde. - [`012-V0_2_7_START_PROMPT.md`](012-V0_2_7_START_PROMPT.md) — prompt réaligné par `0.2.6-pre.015` puis renforcé en contrat de reprise autonome par `0.2.6-pre.018-fix.002`; il est le prochain prompt actif et ouvre `0.2.7 — WebSocket Solana standard` depuis `v0.2.6`, impose les lectures/règles ordonnées, laudit officiel et historique, le threat-model session/subscription/reconnect/backpressure, la matrice de compliance, un gate `pre.001` strict et une prévision souple de prereleases avant toute implémentation lourde.

View File

@@ -1,8 +1,10 @@
<!-- file: prompts/011-V0_2_6_START_PROMPT.md --> <!-- file: prompts/011-V0_2_6_START_PROMPT.md -->
<!-- version: 8 --> <!-- version: 9 -->
# Prompt de démarrage `0.2.6` — Wallet Desk # Prompt de démarrage `0.2.6` — Wallet Desk
> **Statut : consommé et clôturé par la release stable `v0.2.6`.** Ce document reste la trace du contrat de reprise de `0.2.6`; il ne doit plus être utilisé comme prompt actif. La prochaine session utilise [`012-V0_2_7_START_PROMPT.md`](012-V0_2_7_START_PROMPT.md).
## 1. Contexte de reprise ## 1. Contexte de reprise
La base attendue est la release stable : La base attendue est la release stable :