v0.2.1-rel.001

This commit is contained in:
2026-08-17 22:50:56 +02:00
parent 79b67f8eae
commit 6c3ecf1f18
8 changed files with 246 additions and 88 deletions

View File

@@ -1,10 +1,14 @@
<!-- file: CHANGELOG.md --> <!-- file: CHANGELOG.md -->
<!-- version: 4 --> <!-- version: 5 -->
# 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/`. 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.1 — HTTP Solana foundation — 2026-08-17
`0.2.1` stabilise `ksp-onchain-transport-lib` comme foundation HTTP JSON-RPC Solana provider-neutral : settings publics, endpoints/pool/rôles, priorités et fairness, RPS/burst/concurrence/cooldown, deadline commune, retry/backoff, classification no-resend après dispatch ambigu, snapshots sûrs et exécution HTTP réelle via `reqwest`/rustls. La release fige un registre audité de 52 méthodes HTTP courantes et 14 méthodes historiques Deprecated/Removed, avec quatre wrappers typés canari (`getBalance`, `getGenesisHash`, `getHealth`, `getVersion`) et une partition explicite des 48 méthodes restantes sur `0.2.2``0.2.4`. Elle ajoute `std.transport`, son schema/exemple et l'adapter `ksp-config-lib -> ksp-onchain-transport-lib`, sans dépendance inverse, ainsi que la redaction des URLs/provider credentials, la neutralisation des URLs contenues dans les `reqwest::Error`, un sink Logging Transport dédié à `info`, des fixtures HTTP déterministes, des canaries de complétude et un smoke Devnet opt-in validant la composition Config -> Transport. Le smoke cross-crates reste temporairement hébergé dans Config et doit migrer vers une future surface d'intégration/orchestration ; ce placement n'est pas un modèle pour les futurs smokes `Config + autre crate`. Le prompt `prompts/007-V0_2_2_START_PROMPT.md` ouvre `0.2.2 — HTTP Accounts + Tokens + Cluster`.
## 0.2.0 — Audit bot3 et planification de la série `0.2.x` — 2026-08-17 ## 0.2.0 — Audit bot3 et planification de la série `0.2.x` — 2026-08-17
`0.2.0` stabilise le cadrage de la prochaine phase fonctionnelle de KSP après audit de `khadhroony-bot3`. La release fixe l'ordre `0.2.1+` autour du transport HTTP Solana, du Wallet `.kspwallet`, de Wallet Desk, des transports WebSocket/LaserStream/Yellowstone, du transport off-chain de prix, de `ksp-interface-lib` et de `ksp-program-api`; elle impose la couverture exhaustive des surfaces Transport documentées avec warnings KSP pour les opérations deprecated/obsolete encore fonctionnelles et unstable/experimental. Elle stabilise également la progression durable `RAW -> CORE -> DECODE -> SPECIALIZED`, RAW/CORE sans décodage Program, puis des vertical slices complets par groupe à partir de DECODE, avec priorité Solana Core, SPL token/trading, metadata token, Anchor, Meteora/Raydium/Pump/Orca, routing et Market Desk progressive. Le prompt `prompts/006-V0_2_1_START_PROMPT.md` ouvre `0.2.1 — ksp-onchain-transport-lib / HTTP Solana foundation` avec un gate de sizing imposant qu'une release concrète reste clôturable dans une seule session. `0.2.0` stabilise le cadrage de la prochaine phase fonctionnelle de KSP après audit de `khadhroony-bot3`. La release fixe l'ordre `0.2.1+` autour du transport HTTP Solana, du Wallet `.kspwallet`, de Wallet Desk, des transports WebSocket/LaserStream/Yellowstone, du transport off-chain de prix, de `ksp-interface-lib` et de `ksp-program-api`; elle impose la couverture exhaustive des surfaces Transport documentées avec warnings KSP pour les opérations deprecated/obsolete encore fonctionnelles et unstable/experimental. Elle stabilise également la progression durable `RAW -> CORE -> DECODE -> SPECIALIZED`, RAW/CORE sans décodage Program, puis des vertical slices complets par groupe à partir de DECODE, avec priorité Solana Core, SPL token/trading, metadata token, Anchor, Meteora/Raydium/Pump/Orca, routing et Market Desk progressive. Le prompt `prompts/006-V0_2_1_START_PROMPT.md` ouvre `0.2.1 — ksp-onchain-transport-lib / HTTP Solana foundation` avec un gate de sizing imposant qu'une release concrète reste clôturable dans une seule session.

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml # file: Cargo.toml
# version: 108 # version: 109
[workspace] [workspace]
resolver = "3" resolver = "3"
members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib"] members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib"]
[workspace.package] [workspace.package]
version = "0.2.1-pre.7" version = "0.2.1"
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: 33 --> <!-- version: 34 -->
# Roadmap KSP # Roadmap KSP
@@ -41,11 +41,11 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U
### Cadrage ### Cadrage
- [X] `0.2.0` — Audit bot3, ordre fonctionnel de `0.2.x`, architecture durable, discipline de sizing et pipeline RAW/CORE/DECODE/SPECIALIZED stabilisés. - [X] `0.2.0` — Audit bot3, ordre fonctionnel de `0.2.x`, architecture durable, discipline de sizing et pipeline RAW/CORE/DECODE/SPECIALIZED stabilisés.
- [/] `0.2.1` — HTTP foundation fonctionnellement complète dans la candidate de clôture : matrice 52+14, runtime/routing/résilience/exécution HTTP, 4 canaris typés, `std.transport`, adapter Config -> Transport, canaries de clôture, smoke Devnet opt-in et documentation durable sont matérialisés ; seule la publication stable `rel.001` reste à valider. - [X] `0.2.1` — HTTP foundation stable : matrice 52+14, runtime/routing/résilience/exécution HTTP, 4 canaris typés, `std.transport`, adapter Config -> Transport, canaries de clôture, smoke Devnet opt-in et documentation durable validés ; les 48 wrappers typés restants sont reportés à `0.2.2``0.2.4`.
### Releases fonctionnelles décidées/pressenties ### Releases fonctionnelles décidées/pressenties
- [/] `0.2.1`**HTTP transport foundation réduite par le gate `pre.001`** : surface candidate de release complète ; crate/settings/JSON-RPC/registry 52 current + 14 deprecated historiques, pool/rôles/limites/retry, Config adapter, documentation et 4 méthodes typées canari (`getBalance`, `getGenesisHash`, `getHealth`, `getVersion`) ; publication stable encore en attente. - [X] `0.2.1`**HTTP transport foundation réduite par le gate `pre.001`** : crate/settings/JSON-RPC/registry 52 current + 14 deprecated historiques, pool/rôles/limites/retry, Config adapter, documentation et 4 méthodes typées canari (`getBalance`, `getGenesisHash`, `getHealth`, `getVersion`) publiés stables.
- [ ] `0.2.2` — Compléter HTTP Accounts + Tokens + Cluster : 5 méthodes Accounts restantes + 5 Tokens + 12 Cluster restantes, soit 22 méthodes. - [ ] `0.2.2` — Compléter HTTP Accounts + Tokens + Cluster : 5 méthodes Accounts restantes + 5 Tokens + 12 Cluster restantes, soit 22 méthodes.
- [ ] `0.2.3` — Compléter les 11 méthodes HTTP Transactions, y compris write/submission technique avec politique no-resend ambigu. - [ ] `0.2.3` — Compléter les 11 méthodes HTTP Transactions, y compris write/submission technique avec politique no-resend ambigu.
- [ ] `0.2.4` — Compléter les 10 méthodes HTTP Blocks + 5 Economics et exécuter la compliance finale de toute la surface HTTP 52 current + 14 deprecated historiques. - [ ] `0.2.4` — Compléter les 10 méthodes HTTP Blocks + 5 Economics et exécuter la compliance finale de toute la surface HTTP 52 current + 14 deprecated historiques.

161
deltas/0.2.1/rel.001.md Normal file
View File

@@ -0,0 +1,161 @@
<!-- file: deltas/0.2.1/rel.001.md -->
<!-- version: 1 -->
# Delta `v0.2.1-rel.001`
## Base
Base attendue :
```text
v0.2.1-pre.007
```
`pre.007` a été validée localement par l'opérateur le 2026-08-17 avec :
- `cargo fmt --all` ;
- `cargo check --workspace` ;
- `cargo clippy --workspace --all-targets` ;
- `cargo test -p ksp-onchain-transport-lib` ;
- `cargo test -p ksp-config-lib` ;
- `cargo test -p ksp-core-lib` ;
- `cargo test -p ksp-app-config-desk` ;
- `cargo test --workspace` ;
- les graphes `cargo tree`, `cargo tree -d`, `cargo tree -e features` et `cargo tree -e normal` pour Transport et Config ;
- le smoke Devnet opt-in `cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture`, avec `1 passed; 0 failed`.
Version Cargo cible :
```text
0.2.1
```
## Objectif
Publier `0.2.1 — HTTP Solana foundation` sans ajouter de capacité fonctionnelle après la candidate `pre.007`.
`rel.001` est strictement publicationnelle :
- passage du workspace à la version stable `0.2.1` ;
- clôture `[X]` de `0.2.1` dans le ROADMAP ;
- ajout de l'entrée stable `0.2.1` au CHANGELOG ;
- clôture du plan HTTP et de sa matrice de validation avec les preuves opérateur ;
- synchronisation des index/plans généraux ;
- conservation explicite du TODO d'ownership du smoke cross-crates.
Aucun fichier Rust de production, aucune API publique, aucune configuration runtime, aucune dépendance et aucune feature Cargo ne changent dans cette livraison.
## Surface stable publiée
`0.2.1` stabilise `ksp-onchain-transport-lib` avec :
```text
JSON-RPC 2.0 sur HTTP POST
52 méthodes HTTP courantes auditées
14 méthodes historiques Deprecated / Removed
4 wrappers typés : getBalance/getGenesisHash/getHealth/getVersion
partition typed restante : 22 / 11 / 15 sur 0.2.20.2.4
pool rôles/capabilities/priorités/fairness
RPS/burst/concurrence/cooldown
deadline commune + timeout/retry/backoff
no-resend après dispatch ambigu
429/Retry-After + statuts temporaires
std.transport + schema + example
adapter ksp-config-lib -> ksp-onchain-transport-lib
redaction URL/provider credentials
neutralisation des URLs contenues dans reqwest::Error
sink Logging Transport dédié à info
fixtures HTTP déterministes
canaries de complétude
smoke Devnet opt-in
README/USAGE Transport
```
La surface raw/générique reste distincte de la couverture typée : elle ne vaut pas implémentation des 48 wrappers reportés.
## Validation de la candidate
Les tests de `pre.007` ont confirmé notamment :
```text
Transport : 70 unit + 8 public API + 2 release completeness = 80
Config : 95 unit + 5 ownership + 13 public API + 1 smoke ignored = 114
Core : tests unit/public/workspace canaries propres
Config Desk : tests unit/desktop/public propres
workspace : propre, hors probes explicitement ignored
```
Le smoke Devnet a ensuite été lancé explicitement et a atteint les quatre canaris foundation via le profil `devnet_public` committé.
Les graphes Cargo confirment la frontière voulue :
```text
ksp-config-lib -> ksp-onchain-transport-lib
ksp-onchain-transport-lib -X-> ksp-config-lib
Transport -X-> Store/Program/tracing direct
```
Les features directes restent activées localement dans les crates consommatrices. Les doublons observés par `cargo tree -d` sur les graphes inspectés se limitent à `syn` 2.x/3.x dans les chaînes transitive/proc-macro ; aucune stack HTTP/Tokio KSP concurrente n'est introduite.
## TODO ownership des smoke tests cross-crates
Le fichier actuel :
```text
crates/ksp-config-lib/tests/transport_devnet_smoke.rs
```
reste temporairement sous Config parce que la direction de dépendance existante permet d'y composer Config -> Transport sans violer le firewall Transport -> Config.
Cette localisation est une **exception transitoire** et ne devient jamais une convention KSP :
- `ksp-config-lib` ne doit pas devenir la destination générale des smoke tests ;
- cela inclut explicitement les futurs scénarios `Config + autre crate` ;
- les tests déterministes de mapping/validation Config restent dans Config ;
- un smoke autonome d'une crate peut rester dans cette crate s'il n'exige pas de composition interdite ;
- les smokes cross-crates doivent appartenir à une future surface dédiée d'intégration/orchestration/demo ;
- le smoke `Config -> Transport -> Devnet` devra migrer vers cette surface lorsqu'elle existera.
## Documentation de clôture
Mises à jour :
```text
CHANGELOG.md
docs/000-README.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md
docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
ROADMAP.md
```
Le prompt de reprise `prompts/007-V0_2_2_START_PROMPT.md` était déjà livré en `pre.007` et reste inchangé ; il attend comme base le tag stable `v0.2.1`.
## Commit et tag
Identifiant de commit attendu :
```text
v0.2.1-rel.001
```
Le tag stable ne doit être créé qu'après application et validation de ce delta :
```text
v0.2.1
```
Le tag porte uniquement la publication stable ; aucun tag prerelease/fix n'est requis.
## Validation finale après application
Comme `rel.001` ne modifie aucun code de production et ne change que la version workspace et la documentation, la gate finale reste :
```bash
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
```
Après succès : commit `v0.2.1-rel.001`, puis création du tag `v0.2.1`.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/000-README.md --> <!-- file: docs/000-README.md -->
<!-- version: 23 --> <!-- version: 24 -->
# Documentation KSP # Documentation KSP
@@ -62,7 +62,7 @@ D'autres sous-répertoires seront ajoutés uniquement lorsque leur rôle aura é
## Documents de planification ## Documents de planification
Le plan historique de la phase fondatrice clôturée est conservé dans [`plans/001-V0_0_3_PLAN.md`](plans/001-V0_0_3_PLAN.md). La séquence active des premières releases fonctionnelles est définie dans [`plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md`](plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md). Le plan détaillé de la release stable `0.1.1` est conservé comme historique clôturé dans [`plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md`](plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.2` est conservé comme historique clôturé dans [`plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md`](plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.3 — Configuration foundation` est conservé comme historique clôturé dans [`plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md`](plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.4 — ksp-app-config-desk` est conservé comme historique clôturé dans [`plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md`](plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md), avec sa matrice finale [`validation/001-V0_1_4_CONFIG_DESKTOP.md`](validation/001-V0_1_4_CONFIG_DESKTOP.md). Son prompt d'ouverture historique reste [`../prompts/004-V0_1_4_START_PROMPT.md`](../prompts/004-V0_1_4_START_PROMPT.md). La release stable `0.2.0` clôt l'audit de bot3 et le découpage de la série. Son plan directeur est conservé comme historique clôturé dans [`plans/007-V0_2_0_SERIES_PLANNING.md`](plans/007-V0_2_0_SERIES_PLANNING.md), avec sa matrice finale [`validation/002-V0_2_0_SERIES_PLANNING.md`](validation/002-V0_2_0_SERIES_PLANNING.md). `0.2.1` a été ouverte par [`../prompts/006-V0_2_1_START_PROMPT.md`](../prompts/006-V0_2_1_START_PROMPT.md). Son `pre.001` applique le gate de sizing et crée [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md); `pre.001-fix.001` recalibre la couverture typed sur `0.2.1``0.2.4` sans perdre l'inventaire exhaustif. `pre.007` prépare maintenant la clôture de la foundation avec [`validation/003-V0_2_1_ONCHAIN_HTTP.md`](validation/003-V0_2_1_ONCHAIN_HTTP.md), README/USAGE Transport, smoke Devnet opt-in et [`../prompts/007-V0_2_2_START_PROMPT.md`](../prompts/007-V0_2_2_START_PROMPT.md). Le plan historique de la phase fondatrice clôturée est conservé dans [`plans/001-V0_0_3_PLAN.md`](plans/001-V0_0_3_PLAN.md). La séquence active des premières releases fonctionnelles est définie dans [`plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md`](plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md). Le plan détaillé de la release stable `0.1.1` est conservé comme historique clôturé dans [`plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md`](plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.2` est conservé comme historique clôturé dans [`plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md`](plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.3 — Configuration foundation` est conservé comme historique clôturé dans [`plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md`](plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.4 — ksp-app-config-desk` est conservé comme historique clôturé dans [`plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md`](plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md), avec sa matrice finale [`validation/001-V0_1_4_CONFIG_DESKTOP.md`](validation/001-V0_1_4_CONFIG_DESKTOP.md). Son prompt d'ouverture historique reste [`../prompts/004-V0_1_4_START_PROMPT.md`](../prompts/004-V0_1_4_START_PROMPT.md). La release stable `0.2.0` clôt l'audit de bot3 et le découpage de la série. Son plan directeur est conservé comme historique clôturé dans [`plans/007-V0_2_0_SERIES_PLANNING.md`](plans/007-V0_2_0_SERIES_PLANNING.md), avec sa matrice finale [`validation/002-V0_2_0_SERIES_PLANNING.md`](validation/002-V0_2_0_SERIES_PLANNING.md). La release stable `0.2.1 — HTTP Solana foundation` a été ouverte par [`../prompts/006-V0_2_1_START_PROMPT.md`](../prompts/006-V0_2_1_START_PROMPT.md). Son gate de sizing et sa matrice exhaustive sont conservés dans [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md), avec la validation finale [`validation/003-V0_2_1_ONCHAIN_HTTP.md`](validation/003-V0_2_1_ONCHAIN_HTTP.md), README/USAGE Transport et le smoke Devnet opt-in de composition Config -> Transport. Le prompt [`../prompts/007-V0_2_2_START_PROMPT.md`](../prompts/007-V0_2_2_START_PROMPT.md) devient le point d'entrée de `0.2.2`.
`IDEAS.md` conserve les pistes et questions qui ne sont pas encore des engagements du roadmap ni des décisions architecturales. `IDEAS.md` conserve les pistes et questions qui ne sont pas encore des engagements du roadmap ni des décisions architecturales.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md --> <!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md -->
<!-- version: 32 --> <!-- version: 33 -->
# Séquence des releases fonctionnelles KSP # Séquence des releases fonctionnelles KSP
@@ -37,7 +37,7 @@ Séquence par défaut :
0.1.4 ksp-app-config-desk 0.1.4 ksp-app-config-desk
``` ```
`0.1.1`, `0.1.2`, `0.1.3` et `0.1.4` sont désormais des releases stables. `0.1.1`, `0.1.2`, `0.1.3`, `0.1.4`, `0.2.0` et `0.2.1` sont désormais des releases stables.
`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.
@@ -378,7 +378,7 @@ Mission : créer `ksp-onchain-transport-lib` avec la foundation HTTP JSON-RPC in
Inclure : settings publics ; endpoint/provider/cluster ; pool logique ; rôles/capabilities/request kinds ouverts ; priorités/limites/concurrence ; timeout/retry/backoff ; JSON-RPC ; metadata centrale de statut méthode + forme de requête + runtime ; warning centralisé lorsqu'un contrat supported est deprecated/unstable ; document Config standard + adapter Config -> Transport ; `getBalance`, `getGenesisHash`, `getHealth`, `getVersion`. Inclure : settings publics ; endpoint/provider/cluster ; pool logique ; rôles/capabilities/request kinds ouverts ; priorités/limites/concurrence ; timeout/retry/backoff ; JSON-RPC ; metadata centrale de statut méthode + forme de requête + runtime ; warning centralisé lorsqu'un contrat supported est deprecated/unstable ; document Config standard + adapter Config -> Transport ; `getBalance`, `getGenesisHash`, `getHealth`, `getVersion`.
Le plan détaillé actif est `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`. `pre.007` clôt la surface candidate avec canaries de complétude, smoke Devnet opt-in Config -> Transport, README/USAGE et prompt `0.2.2`. 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

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md --> <!-- file: docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md -->
<!-- version: 11 --> <!-- version: 12 -->
# `0.2.1-pre.001` — plan `ksp-onchain-transport-lib` HTTP Solana foundation # `0.2.1-pre.001` — plan `ksp-onchain-transport-lib` HTTP Solana foundation
@@ -7,7 +7,7 @@
Ce document ouvre `0.2.1` à partir de la base stable fournie `0.2.0` et exécute le gate de sizing imposé par le prompt `006` avant toute grosse implémentation. Sa version initiale appartient à `0.2.1-pre.001`; le split de releases présenté dans cette version du plan est le recalibrage documentaire de `0.2.1-pre.001-fix.001`. Ce document ouvre `0.2.1` à partir de la base stable fournie `0.2.0` et exécute le gate de sizing imposé par le prompt `006` avant toute grosse implémentation. Sa version initiale appartient à `0.2.1-pre.001`; le split de releases présenté dans cette version du plan est le recalibrage documentaire de `0.2.1-pre.001-fix.001`.
> **État `pre.007` : candidate de clôture.** La foundation HTTP réduite est fonctionnellement matérialisée ; `pre.007` ajoute les canaries finales, le smoke Devnet opt-in, README/USAGE, la matrice de validation durable et le prompt `0.2.2`. La publication stable reste séparée dans `rel.001` après validations opérateur. > **État `0.2.1-rel.001` : clôturé stable.** La foundation HTTP réduite est publiée après validation opérateur complète de `pre.007`, des graphes Cargo et du smoke Devnet opt-in. `0.2.2` devient la prochaine release active.
Conclusion du gate : Conclusion du gate :
@@ -873,15 +873,15 @@ La release peut devenir stable seulement si :
## 22. Prévision souple des prereleases de la `0.2.1` réduite ## 22. Prévision souple des prereleases de la `0.2.1` réduite
| Tranche | Objectif | | Tranche | Objectif |
|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `pre.001` | audit KSP + bot3 + docs officielles, matrice 52+14, architecture, split et sizing | | `pre.001` | audit KSP + bot3 + docs officielles, matrice 52+14, architecture, split et sizing |
| `pre.002` | **réalisé** : crate/workspace, codes erreur, settings/validation, JSON-RPC, descriptors/status, base Logging | | `pre.002` | **réalisé** : crate/workspace, codes erreur, settings/validation, JSON-RPC, descriptors/status, base Logging |
| `pre.003` | **réalisé** : endpoint client + pool logique + rôles/capabilities + priorité/fairness/fallback + snapshots sûrs | | `pre.003` | **réalisé** : endpoint client + pool logique + rôles/capabilities + priorité/fairness/fallback + snapshots sûrs |
| `pre.004` | **réalisé** : RPS/burst/concurrence/cooldown + deadline commune + retry/backoff + classification retry/no-resend | | `pre.004` | **réalisé** : RPS/burst/concurrence/cooldown + deadline commune + retry/backoff + classification retry/no-resend |
| `pre.005` | **réalisé** : exécution HTTP JSON-RPC + `getHealth`, `getVersion`, `getGenesisHash`, `getBalance` + fixtures déterministes + centralisation des canaries workspace dans Core | | `pre.005` | **réalisé** : exécution HTTP JSON-RPC + `getHealth`, `getVersion`, `getGenesisHash`, `getBalance` + fixtures déterministes + centralisation des canaries workspace dans Core |
| `pre.006` | **réalisé** : `std.transport` schema/document/example + registry Config + adapter Config -> Transport + sensibilité/provenance/env tests | | `pre.006` | **réalisé** : `std.transport` schema/document/example + registry Config + adapter Config -> Transport + sensibilité/provenance/env tests |
| `pre.007` | **réalisé côté livraison candidate** : completeness/canaries, smoke opt-in, README/USAGE, docs finales, prompt `0.2.2`, préparation `rel.001`; `cargo tree`/Cargo restent à valider opérateur | | `pre.007` | **réalisé et validé** : completeness/canaries, smoke opt-in, README/USAGE, docs finales, prompt `0.2.2`, validations Cargo et `cargo tree` |
Ce découpage est révisable si une tranche dépasse le budget ; la release réduite, contrairement au scope initial, reste raisonnablement clôturable dans la session. Ce découpage est révisable si une tranche dépasse le budget ; la release réduite, contrairement au scope initial, reste raisonnablement clôturable dans la session.
@@ -982,15 +982,21 @@ Restent à `pre.006` : document/schema/exemple `std.transport`, enregistrement C
- revérification officielle du 2026-08-17 : lindex Solana HTTP courant expose toujours 52 méthodes et la navigation Deprecated conserve les 14 noms historiques audités ; - revérification officielle du 2026-08-17 : lindex Solana HTTP courant expose toujours 52 méthodes et la navigation Deprecated conserve les 14 noms historiques audités ;
- deux canaries dintégration publiques figent la partition `52 current / 14 historical / 4-22-11-15` et le set exact des quatre canaris `0.2.1` ; - deux canaries dintégration publiques figent la partition `52 current / 14 historical / 4-22-11-15` et le set exact des quatre canaris `0.2.1` ;
- la candidate déclare **80 tests Transport** et **114 tests Config**, dont un unique smoke Devnet Config `ignored` ; - la candidate déclare **80 tests Transport** et **114 tests Config**, dont un unique smoke Devnet Config `ignored` ;
- un smoke Devnet `ignored` sous `ksp-config-lib` valide de manière opt-in la chaîne Config -> `devnet_public` -> Transport -> `getHealth/getGenesisHash/getVersion/getBalance`, sans lecture denvironnement dans Transport ; - un smoke Devnet `ignored` sous `ksp-config-lib` valide de manière opt-in la chaîne Config -> `devnet_public` -> Transport -> `getHealth/getGenesisHash/getVersion/getBalance`, sans lecture denvironnement dans Transport ; ce placement est une exception transitoire et non un modèle pour les futurs smokes `Config + autre crate` ;
- `ksp-onchain-transport-lib/README.md` et `USAGE.md` documentent frontières, API raw vs typed, résilience, sécurité, Config et utilisation ; - `ksp-onchain-transport-lib/README.md` et `USAGE.md` documentent frontières, API raw vs typed, résilience, sécurité, Config et utilisation ;
- `docs/validation/003-V0_2_1_ONCHAIN_HTTP.md` devient la matrice durable de clôture ; - `docs/validation/003-V0_2_1_ONCHAIN_HTTP.md` devient la matrice durable de clôture ;
- le niveau de référence du sink Transport dédié revient de `debug` à `info` avant stable ; - le niveau de référence du sink Transport dédié revient de `debug` à `info` avant stable ;
- les écarts documentaires résiduels issus de laudit complet sont normalisés : convention `bindings/gen`, README Config et inventaire composant HTTP ; - les écarts documentaires résiduels issus de laudit complet sont normalisés : convention `bindings/gen`, README Config et inventaire composant HTTP ;
- `prompts/007-V0_2_2_START_PROMPT.md` prépare `0.2.2 — HTTP Accounts + Tokens + Cluster` avec un nouvel audit officiel et gate de sizing ; - `prompts/007-V0_2_2_START_PROMPT.md` prépare `0.2.2 — HTTP Accounts + Tokens + Cluster` avec un nouvel audit officiel et gate de sizing ;
- `CHANGELOG.md` nest pas encore modifié : lentrée stable `0.2.1` appartient à `rel.001`, conformément au workflow des releases précédentes. - `CHANGELOG.md` est mis à jour dans `rel.001` avec la synthèse stable `0.2.1`.
Les validations Cargo et `cargo tree` de cette candidate doivent être exécutées sur le dépôt canonique. Si elles sont propres, `rel.001` reste strictement publicationnel : version stable, statuts ROADMAP/plan/validation, entrée CHANGELOG, delta de release, commit et tag `v0.2.1`. Les validations Cargo, `cargo tree` et le smoke Devnet opt-in de cette candidate ont été exécutés avec succès sur le dépôt canonique. `rel.001` reste strictement publicationnel : version stable, statuts ROADMAP/plan/validation, entrée CHANGELOG et delta de release. Le commit `v0.2.1-rel.001` doit être validé avant création du tag stable `v0.2.1`.
### 22.7 Clôture stable `0.2.1-rel.001`
La publication stable est autorisée par les preuves opérateur du 2026-08-17 : `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, tests ciblés Transport/Config/Core/Config Desk, `cargo test --workspace`, graphes `cargo tree` Transport et Config, puis smoke Devnet explicite. Le smoke live a atteint les quatre canaris avec le profil `devnet_public`.
TODO architectural conservé pour la suite : `ksp-config-lib` ne doit jamais devenir la destination générale des smoke tests cross-crates. Le test actuel `Config -> Transport -> Devnet` reste temporairement sous Config uniquement parce qu'aucune crate/surface d'intégration ou d'orchestration n'existe encore ; il devra migrer dès qu'une telle surface sera disponible, et les futurs smokes `Config + autre crate` devront viser cette surface dédiée.
## 23. Séquence `0.2.x` recalibrée ## 23. Séquence `0.2.x` recalibrée

View File

@@ -1,11 +1,11 @@
<!-- file: docs/validation/003-V0_2_1_ONCHAIN_HTTP.md --> <!-- file: docs/validation/003-V0_2_1_ONCHAIN_HTTP.md -->
<!-- version: 1 --> <!-- version: 2 -->
# Validation `0.2.1` — HTTP Solana foundation # Validation `0.2.1` — HTTP Solana foundation
## Objet ## Objet
Cette matrice synthétise les critères de clôture de `0.2.1 — ksp-onchain-transport-lib / HTTP Solana foundation`, les preuves acquises jusqu'à `pre.006-fix.002` et les validations finales attendues de `pre.007` avant publication `rel.001`. Cette matrice synthétise les critères de clôture de `0.2.1 — ksp-onchain-transport-lib / HTTP Solana foundation` et les preuves opérateur ayant autorisé la publication stable `0.2.1-rel.001`.
Elle ne remplace ni `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md` ni les deltas `0.2.1`. Elle ne remplace ni `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md` ni les deltas `0.2.1`.
@@ -59,35 +59,35 @@ KSP les conserve comme `Deprecated / Removed / Historical`; `0.2.1` ne simule pa
## Matrice de clôture ## Matrice de clôture
| Critère | État candidat `pre.007` | Preuve / contrat | | Critère | État stable `0.2.1` | Preuve / contrat |
|------------------------------------------------------------|-------------------------|-----------------------------------------------------------------------| |------------------------------------------------------------|---------------------|-----------------------------------------------------------------------|
| Crate `ksp-onchain-transport-lib` présente et indépendante | OK | manifest + canary Core `workspace_dependencies` | | Crate `ksp-onchain-transport-lib` présente et indépendante | OK | manifest + canary Core `workspace_dependencies` |
| Transport -X-> Config/Store/Program | OK | canary de firewall workspace | | Transport -X-> Config/Store/Program | OK | canary de firewall workspace |
| Transport -X-> `tracing` direct | OK | ownership Logging + `ksp-logging-lib` | | Transport -X-> `tracing` direct | OK | ownership Logging + `ksp-logging-lib` |
| Features Cargo activées localement par consumer | OK | canary workspace + manifests | | Features Cargo activées localement par consumer | OK | canary workspace + manifests |
| Target Logging explicite possédé par la crate | OK | `src/constants.rs` + canary `workspace_logging` | | Target Logging explicite possédé par la crate | OK | `src/constants.rs` + canary `workspace_logging` |
| URL endpoint redacted dans settings/snapshots/Debug | OK | tests settings/client/pool/public API | | URL endpoint redacted dans settings/snapshots/Debug | OK | tests settings/client/pool/public API |
| `reqwest::Error` source sans URL sensible | OK | `without_url()` + canary timeout secret | | `reqwest::Error` source sans URL sensible | OK | `without_url()` + canary timeout secret |
| JSON-RPC 2.0 request/response/id/error | OK | tests `json_rpc` | | JSON-RPC 2.0 request/response/id/error | OK | tests `json_rpc` |
| Registry HTTP courant | OK | 52 descriptors + canary de release | | Registry HTTP courant | OK | 52 descriptors + canary de release |
| Registry historique Deprecated | OK | 14 descriptors `Removed` + canary de release | | Registry historique Deprecated | OK | 14 descriptors `Removed` + canary de release |
| Partition typed future | OK | `4 / 22 / 11 / 15` pour `0.2.1``0.2.4` | | Partition typed future | OK | `4 / 22 / 11 / 15` pour `0.2.1``0.2.4` |
| Quatre canaris typés exacts | OK | `getBalance`, `getGenesisHash`, `getHealth`, `getVersion` | | Quatre canaris typés exacts | OK | `getBalance`, `getGenesisHash`, `getHealth`, `getVersion` |
| Pool rôles/capabilities/priorités/fairness | OK | tests pool | | Pool rôles/capabilities/priorités/fairness | OK | tests pool |
| RPS/burst/concurrence/cooldown | OK | tests resilience/pool | | RPS/burst/concurrence/cooldown | OK | tests resilience/pool |
| Deadline/timeout/retry borné | OK | tests executor/resilience | | Deadline/timeout/retry borné | OK | tests executor/resilience |
| No-resend après dispatch ambigu | OK | descriptor + policy + tests | | No-resend après dispatch ambigu | OK | descriptor + policy + tests |
| 429/Retry-After et statuts temporaires | OK | tests executor | | 429/Retry-After et statuts temporaires | OK | tests executor |
| Config standard Transport | OK | `std.transport.json` + schema + example | | Config standard Transport | OK | `std.transport.json` + schema + example |
| Direction Config -> Transport | OK | adapter `load_resolved_transport_config` | | Direction Config -> Transport | OK | adapter `load_resolved_transport_config` |
| Sensibilité/provenance/env Transport | OK | tests Config | | Sensibilité/provenance/env Transport | OK | tests Config |
| Logging Transport dédié | OK | sink dédié `info` dans `std.logging.json` | | Logging Transport dédié | OK | sink dédié `info` dans `std.logging.json` |
| Tests réseau par défaut déterministes | OK | fixtures + serveur HTTP local | | Tests réseau par défaut déterministes | OK | fixtures + serveur HTTP local |
| Smoke Devnet | OPT-IN | `tests/transport_devnet_smoke.rs`, ignored par défaut | | Smoke Devnet | OPT-IN | `tests/transport_devnet_smoke.rs`, ignored par défaut |
| README durable | OK | `crates/ksp-onchain-transport-lib/README.md` | | README durable | OK | `crates/ksp-onchain-transport-lib/README.md` |
| USAGE durable | OK | `crates/ksp-onchain-transport-lib/USAGE.md` | | USAGE durable | OK | `crates/ksp-onchain-transport-lib/USAGE.md` |
| Prompt release suivante | OK | `prompts/007-V0_2_2_START_PROMPT.md` | | Prompt release suivante | OK | `prompts/007-V0_2_2_START_PROMPT.md` |
| Matrice HTTP globale préservée | OK | plan `008`; 48 méthodes restantes restent affectées à `0.2.2``0.2.4` | | Matrice HTTP globale préservée | OK | plan `008`; 48 méthodes restantes restent affectées à `0.2.2``0.2.4` |
## Canaries de complétude finales ## Canaries de complétude finales
@@ -103,11 +103,11 @@ historical => Deprecated + Removed + NotApplicable
Ces checks complètent les tests unitaires existants du registre et protègent la frontière de release depuis l'API publique. Ces checks complètent les tests unitaires existants du registre et protègent la frontière de release depuis l'API publique.
La candidate déclare **80 tests Transport** et **114 tests Config**, dont le smoke Devnet Config unique marqué `ignored`. Ces nombres sont des canaries de clôture de la candidate et devront être confirmés par Cargo sur le dépôt canonique. La candidate validée déclare **80 tests Transport** et **114 tests Config**, dont le smoke Devnet Config unique marqué `ignored`. Cargo a confirmé ces surfaces sur le dépôt canonique avant `rel.001`.
## Smoke Devnet opt-in ## Smoke Devnet opt-in
Le smoke live appartient à `ksp-config-lib`, car il doit prouver la chaîne : Le smoke live est temporairement hébergé dans `ksp-config-lib`, car la direction de dépendance actuelle permet dy prouver la chaîne sans introduire Transport -> Config :
```text ```text
Config Config
@@ -128,35 +128,24 @@ Exécution explicite :
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
``` ```
Ce test dépend d'un service Devnet externe. Il reste ignoré dans les suites déterministes et un incident/rate-limit du RPC public n'est pas assimilé à une régression locale sans analyse. Ce test dépend d'un service Devnet externe. Il reste ignoré dans les suites déterministes et un incident/rate-limit du RPC public n'est pas assimilé à une régression locale sans analyse. Il a été exécuté explicitement avec succès avant `rel.001`.
## Audit `cargo tree` final attendu **TODO ownership :** `ksp-config-lib` ne doit jamais devenir la destination générale des smoke tests, y compris pour les futurs scénarios `Config + autre crate`. Dès qu'une surface KSP d'intégration/orchestration appropriée existe, ce smoke doit y migrer ; les futurs smokes cross-crates doivent être créés directement sur cette surface dédiée.
À exécuter sur le dépôt canonique : ## Audit `cargo tree` final
```bash Les graphes ont été exécutés sur le dépôt canonique pour Transport et Config sous les formes normale, duplicates et features. Ils confirment :
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib -d
cargo tree -p ksp-onchain-transport-lib -e features
cargo tree -p ksp-onchain-transport-lib -e normal
cargo tree -p ksp-config-lib - aucune dépendance Config sous Transport ;
cargo tree -p ksp-config-lib -d
cargo tree -p ksp-config-lib -e features
cargo tree -p ksp-config-lib -e normal
```
Points attendus :
- pas de Config sous Transport ;
- Config dépend de Transport dans le sens autorisé ; - Config dépend de Transport dans le sens autorisé ;
- pas de Store/Program ; - aucune dépendance Store/Program ;
- pas de `tracing` direct chez Transport ; - aucune dépendance `tracing` directe de Transport ;
- `reqwest/rustls`, `serde/derive`, Tokio Transport et Tokio de test Config restent activés localement par les crates consommatrices. - `reqwest/rustls`, `serde/derive`, Tokio Transport et Tokio de test Config restent activés localement par les crates consommatrices ;
- les doublons signalés par `cargo tree -d` sont limités à `syn` 2.x/3.x dans les graphes inspectés et proviennent des chaînes proc-macro/transitives, sans duplication d'une stack HTTP/Tokio KSP concurrente.
## Validations finales de `pre.007` ## Validations finales opérateur
Avant commit : Validé le 2026-08-17 sur le dépôt canonique :
```bash ```bash
cargo fmt --all cargo fmt --all
@@ -169,26 +158,24 @@ cargo test -p ksp-app-config-desk
cargo test --workspace cargo test --workspace
``` ```
Puis, de manière opt-in : Le smoke live a ensuite été exécuté explicitement :
```bash ```bash
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
``` ```
Le smoke live est une preuve supplémentaire ; les suites déterministes restent la gate reproductible de publication. Résultat : `1 passed; 0 failed`; les quatre canaris foundation sont donc atteints via le profil Devnet committé.
## Préparation de `rel.001` ## Publication `rel.001`
Si les validations de `pre.007` sont propres, `rel.001` doit rester minimal : `0.2.1-rel.001` ne contient aucune nouvelle capacité HTTP. Il publie :
```text ```text
workspace.package.version -> 0.2.1 workspace.package.version -> 0.2.1
ROADMAP : 0.2.1 -> [X] ROADMAP : 0.2.1 -> [X]
CHANGELOG : synthèse stable 0.2.1 CHANGELOG : synthèse stable 0.2.1
plan 008 / matrice 003 : statut clôturé et preuves opérateur plan 008 / matrice 003 : statut clôturé et preuves opérateur
nouveau delta deltas/0.2.1/rel.001.md delta deltas/0.2.1/rel.001.md
commit v0.2.1-rel.001 commit v0.2.1-rel.001
tag v0.2.1 tag stable v0.2.1 après validation du commit de release
``` ```
Aucune nouvelle capacité HTTP ne doit être introduite dans `rel.001`.