diff --git a/ROADMAP.md b/ROADMAP.md index a8e75ff..a354c46 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,5 @@ - + # Roadmap KSP @@ -17,6 +17,7 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U - Une prerelease vise environ **15 à 20 minutes de travail effectif**. - Une release concrète doit être dimensionnée pour pouvoir être ouverte et clôturée dans **une seule session de chat**. +- Cette règle fixe une durée maximale par release, pas une obligation de changer de session après chaque release : si une release est clôturée plus vite que prévu, la même session peut ouvrir puis clôturer la release suivante si son propre sizing reste positif et si toutes les frontières version/delta/validation sont conservées. - Si `pre.001` révèle qu'une release est trop grosse, elle est scindée avant implémentation fonctionnelle lourde. - À partir des couches Program/Decode, KSP progresse verticalement groupe par groupe plutôt que par grandes vagues horizontales de decoders/materializers/executors séparés. @@ -44,25 +45,24 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U - [X] `0.2.0-pre.002` — Fixer l'ordre fonctionnel, la discipline de sizing, le pipeline RAW/CORE/DECODE/SPECIALIZED et préparer le prompt `0.2.1`. - [X] `0.2.0-pre.003` — Audit de cohérence final : règles résiduelles supersédées corrigées, fiches `0.2.1+` complétées, TODO bot3 utiles préservés et prompt `0.2.1` finalisé. - [X] `0.2.0-rel.001` — Publication stable du cadrage `0.2.x`; prochaine release : `0.2.1 — ksp-onchain-transport-lib / HTTP Solana foundation`. -- [X] `0.2.1-pre.001` — Audit HTTP officiel/bot3, matrice exhaustive, architecture et gate de sizing : scope monolithique refusé puis split HTTP `0.2.1`–`0.2.6`; `0.2.1` réduite déclarée raisonnablement clôturable. +- [X] `0.2.1-pre.001` — Audit HTTP officiel/bot3, matrice exhaustive, architecture et gate de sizing : scope monolithique refusé, premier split de la couverture HTTP sur `0.2.1`–`0.2.6`, `0.2.1` réduite déclarée raisonnablement clôturable. +- [X] `0.2.1-pre.001-fix.001` — Recalibrer le split HTTP sur `0.2.1`–`0.2.4` : `0.2.2` Accounts + Tokens + Cluster, `0.2.3` Transactions, `0.2.4` Blocks + Economics + compliance finale ; autoriser l'enchaînement de plusieurs releases complètement clôturées dans une même session lorsque le sizing le permet. ### Releases fonctionnelles décidées/pressenties - [/] `0.2.1` — **HTTP transport foundation réduite par le gate `pre.001`** : crate/settings/JSON-RPC/registry exhaustif 52 current + 14 deprecated historiques, pool/rôles/limites/retry/Config adapter, et 4 méthodes typées canari (`getBalance`, `getGenesisHash`, `getHealth`, `getVersion`). -- [ ] `0.2.2` — Compléter HTTP Accounts + Tokens : 5 méthodes Accounts restantes + 5 méthodes Tokens. +- [ ] `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.4` — Compléter les 10 méthodes HTTP Blocks et la forme legacy deprecated de `getBlock`. -- [ ] `0.2.5` — Compléter les 12 méthodes HTTP Cluster restantes. -- [ ] `0.2.6` — Compléter les 5 méthodes HTTP Economics et exécuter la compliance finale de toute la surface HTTP 52 current + 14 deprecated historiques. -- [ ] `0.2.7` — Introduire `ksp-wallet-lib`, le format `.kspwallet`, la gestion sûre des secrets et une architecture d'import/export extensible ; exclure `WalletPolicy`. -- [ ] `0.2.8` — Introduire `ksp-app-wallet-desk` utilisant Config composite + Wallet + transport HTTP, notamment pour afficher l'identité et le solde d'un wallet. -- [ ] `0.2.9` — É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.10` — Ajouter Helius LaserStream WebSocket comme extension du moteur WebSocket standard, sans duplication de client. -- [ ] `0.2.11` — Ajouter une première fondation Yellowstone gRPC standard/provider-neutral ; dimensionner la surface exacte à `pre.001` selon la documentation normative actuelle. -- [ ] `0.2.12` — Introduire `ksp-offchain-transport-lib` avec un premier lecteur de prix, au minimum SOL/USD et SOL/EUR. -- [ ] `0.2.13` — Introduire une petite application desk de visualisation des prix. -- [ ] `0.2.14` — Introduire la première surface de `ksp-interface-lib`, comprenant une API wire publique utilisable par les implémentations officielles et externes. -- [ ] `0.2.15` — Introduire `ksp-program-api` comme premier contrat Program extensible, sans imposer encore `ksp-program-lib` complet. +- [ ] `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.5` — Introduire `ksp-wallet-lib`, le format `.kspwallet`, la gestion sûre des secrets et une architecture d'import/export extensible ; exclure `WalletPolicy`. +- [ ] `0.2.6` — Introduire `ksp-app-wallet-desk` utilisant Config composite + Wallet + transport HTTP, notamment pour afficher l'identité et le solde d'un wallet. +- [ ] `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.9` — Ajouter une première fondation Yellowstone gRPC standard/provider-neutral ; dimensionner la surface exacte à `pre.001` selon la documentation normative actuelle. +- [ ] `0.2.10` — Introduire `ksp-offchain-transport-lib` avec un premier lecteur de prix, au minimum SOL/USD et SOL/EUR. +- [ ] `0.2.11` — Introduire une petite application desk de visualisation des prix. +- [ ] `0.2.12` — Introduire la première surface de `ksp-interface-lib`, comprenant une API wire publique utilisable par les implémentations officielles et externes. +- [ ] `0.2.13` — Introduire `ksp-program-api` comme premier contrat Program extensible, sans imposer encore `ksp-program-lib` complet. ### Règles Transport pour toute la série diff --git a/deltas/0.2.1/pre.001-fix.001.md b/deltas/0.2.1/pre.001-fix.001.md new file mode 100644 index 0000000..6ca0ab8 --- /dev/null +++ b/deltas/0.2.1/pre.001-fix.001.md @@ -0,0 +1,171 @@ + + + +# Delta `0.2.1-pre.001-fix.001` — recalibrage du split HTTP et fusion possible de sessions + +## Base requise + +Livraison précédente : + +```text +0.2.1-pre.001 +workspace.package.version = "0.2.1-pre.1" +``` + +Ce correctif est exclusivement documentaire. Il corrige le dimensionnement issu de `pre.001` avant toute implémentation fonctionnelle lourde de `ksp-onchain-transport-lib`. + +Le delta historique : + +```text +deltas/0.2.1/pre.001.md +``` + +reste inchangé et continue de tracer le premier split décidé par `pre.001`. + +## Objectif + +Réduire le nombre de releases HTTP complémentaires sans diminuer la couverture exhaustive de la surface normative et préciser qu'une même session de chat peut clôturer plusieurs releases successives lorsque leur sizing réel le permet. + +Le correctif ne fusionne jamais les releases elles-mêmes : chaque release conserve son numéro, ses prereleases, son signal de version, ses deltas, ses validations et sa clôture stable propres. + +## Split HTTP corrigé + +Le premier split de `pre.001` était : + +```text +0.2.1 foundation + 4 canaris +0.2.2 Accounts + Tokens +0.2.3 Transactions +0.2.4 Blocks +0.2.5 Cluster +0.2.6 Economics + compliance finale +``` + +Il est remplacé pour l'exécution par : + +```text +0.2.1 HTTP foundation + 4 canaris +0.2.2 Accounts + Tokens + Cluster 22 méthodes +0.2.3 Transactions 11 méthodes +0.2.4 Blocks + Economics + compliance 15 méthodes +``` + +La matrice reste exhaustive : + +```text +4 + 22 + 11 + 15 = 52 méthodes HTTP courantes +``` + +Les 14 méthodes historiques de la section Deprecated restent présentes dans la matrice documentaire avec leur statut runtime déjà décidé par `pre.001`. + +Aucune méthode n'est supprimée ou masquée pour faire tenir le planning. + +## Règle de session précisée + +La règle KSP « une release concrète doit pouvoir être ouverte et clôturée dans une seule session » définit une borne maximale, pas une obligation de changer de chat après chaque release. + +Après clôture complète d'une release, la même session peut ouvrir puis clôturer la suivante si : + +- le gate de sizing de la release suivante reste raisonnablement positif ; +- la release précédente est réellement clôturée avant l'ouverture de la suivante ; +- versions, deltas, validations et critères de clôture restent séparés ; +- aucune dette de validation n'est reportée implicitement sur la release suivante. + +Ainsi, `0.2.2`, `0.2.3` et `0.2.4` représentent **trois sessions nominales au maximum**, mais peuvent tenir dans deux sessions, voire être enchaînées plus rapidement si le travail réel le permet. + +## Séquence `0.2.x` recalibrée + +```text +0.2.1 HTTP transport foundation + 4 canaris +0.2.2 HTTP Accounts + Tokens + Cluster +0.2.3 HTTP Transactions +0.2.4 HTTP Blocks + Economics + compliance complète +0.2.5 wallet foundation (.kspwallet) +0.2.6 Wallet Desk +0.2.7 standard Solana WebSocket +0.2.8 Helius LaserStream WebSocket +0.2.9 Yellowstone gRPC standard foundation +0.2.10 off-chain price transport +0.2.11 price visualization desk +0.2.12 interface/wire foundation +0.2.13 program-api foundation +``` + +Le plan historique `docs/plans/007-V0_2_0_SERIES_PLANNING.md` reste inchangé : il documente la planification telle qu'elle existait à la clôture de `0.2.0`. Le présent fix et les documents actifs portent la séquence courante. + +## Synchronisation documentaire + +Le correctif met à jour : + +- le roadmap et la séquence fonctionnelle ; +- le plan actif `008` et sa matrice méthode -> release ; +- les index documentaires ; +- le prompt historique `006`, en conservant son rôle de trace d'ouverture ; +- l'inventaire courant des composants ; +- les références temporelles de `docs/IDEAS.md` devenues obsolètes après renumérotation. + +L'historique est explicite : `pre.001` garde son premier split `0.2.1`–`0.2.6`; ce `fix.001` porte le recalibrage `0.2.1`–`0.2.4`. + +## Fichiers modifiés + +```text +ROADMAP.md +docs/000-README.md +docs/IDEAS.md +docs/architecture/004-COMPONENT_INVENTORY.md +docs/plans/000-README.md +docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md +prompts/006-V0_2_1_START_PROMPT.md +``` + +## Fichier ajouté + +```text +deltas/0.2.1/pre.001-fix.001.md +``` + +## Fichiers volontairement inchangés + +```text +Cargo.toml +deltas/0.2.1/pre.001.md +docs/plans/007-V0_2_0_SERIES_PLANNING.md +``` + +`pre.001.md` reste la trace immuable de la livraison initiale. Le plan `007` reste l'historique stable de `0.2.0`. + +## Version Cargo + +Aucune modification de `Cargo.toml`. + +Le correctif est documentaire uniquement ; `workspace.package.version` reste : + +```text +0.2.1-pre.1 +``` + +L'identifiant de livraison est : + +```text +0.2.1-pre.001-fix.001 +``` + +## Dépendances + +Aucune dépendance ajoutée ou modifiée. + +## Validations du correctif + +À la livraison du fix : + +- le delta historique `pre.001.md` doit conserver exactement son contenu ; +- le plan `008` doit contenir 52 méthodes courantes réparties exactement en `4 / 22 / 11 / 15` sur `0.2.1 / 0.2.2 / 0.2.3 / 0.2.4` ; +- aucune méthode courante ne doit rester affectée à `0.2.5` ou `0.2.6` ; +- les 14 entrées Deprecated historiques doivent rester dans la matrice ; +- Wallet doit être `0.2.5`, Wallet Desk `0.2.6`, WebSocket `0.2.7`, LaserStream `0.2.8`, Yellowstone `0.2.9` dans les documents actifs ; +- l'enchaînement de plusieurs releases dans une même session doit être autorisé uniquement après clôture complète et nouveau sizing positif ; +- `Cargo.toml` doit rester à `0.2.1-pre.1` ; +- l'archive du fix doit être limitée aux huit fichiers modifiés et au nouveau delta. + +Aucune commande Cargo n'est requise spécifiquement pour ce correctif documentaire. Les validations Rust prévues pour `0.2.1-pre.002` et les frontières globales de release restent inchangées. diff --git a/docs/000-README.md b/docs/000-README.md index 9034ecb..48d3f0f 100644 --- a/docs/000-README.md +++ b/docs/000-README.md @@ -1,5 +1,5 @@ - + # Documentation KSP @@ -61,7 +61,7 @@ D'autres sous-répertoires seront ajoutés uniquement lorsque leur rôle aura é ## 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 le plan actif [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md) : l'inventaire HTTP exhaustif est conservé, mais la couverture typée est répartie sur `0.2.1`–`0.2.6` afin de respecter la règle de clôture d'une release dans une seule session. +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, crée le plan actif [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md) et produit d'abord un split HTTP sur `0.2.1`–`0.2.6`. `0.2.1-pre.001-fix.001` recalibre ensuite ce split sur `0.2.1`–`0.2.4` sans perdre l'inventaire exhaustif, et précise que plusieurs releases peuvent être enchaînées dans un même chat si chacune est clôturée séparément et si le sizing de la suivante reste positif. `IDEAS.md` conserve les pistes et questions qui ne sont pas encore des engagements du roadmap ni des décisions architecturales. diff --git a/docs/IDEAS.md b/docs/IDEAS.md index 1767874..3e5605f 100644 --- a/docs/IDEAS.md +++ b/docs/IDEAS.md @@ -1,5 +1,5 @@ - + # Idées à explorer @@ -104,7 +104,7 @@ Réévaluer seulement si les premières implémentations montrent une duplicatio ### Pool automatique de sessions WebSocket -**Status :** À explorer après `0.2.4` +**Status :** À explorer après `0.2.7` Le contrat WebSocket doit autoriser plusieurs sessions physiques sur une même URL, chaque session portant plusieurs subscriptions. @@ -182,7 +182,7 @@ Un wallet web/online utilisant les contrats KSP est envisagé. La gestion des se ### Formats Wallet import/export supplémentaires -**Status :** À explorer avec `0.2.2` et après +**Status :** À explorer avec `0.2.5` et après Le format natif KSP est `.kspwallet`. L'architecture d'import/export doit rester extensible, mais seules les conversions réellement nécessaires sont implémentées immédiatement. @@ -395,6 +395,6 @@ Si cette capacité devient utile, l’intégration doit être conçue dans la pi **Status :** Transférée au roadmap pour le début de `0.2.x` -`0.2.0-pre.002` fixe désormais le début concret `0.2.1 -> 0.2.10` sous réserve du gate de dimensionnement de chaque `pre.001`. +`0.2.0-pre.002` avait fixé le premier séquencement concret. `0.2.1-pre.001-fix.001` le recalibre désormais sur `0.2.1 -> 0.2.13`, sous réserve du gate de dimensionnement de chaque `pre.001` et avec possibilité d'enchaîner plusieurs releases complètement clôturées dans une même session lorsque le sizing le permet. Les séries après RAW/CORE ne sont volontairement pas numérotées programme par programme à ce stade : la règle est de redécouper chaque vertical slice selon sa taille réelle et de ne jamais ouvrir une release qui ne peut pas être clôturée dans sa session. diff --git a/docs/architecture/004-COMPONENT_INVENTORY.md b/docs/architecture/004-COMPONENT_INVENTORY.md index 2e25a6d..a5a4431 100644 --- a/docs/architecture/004-COMPONENT_INVENTORY.md +++ b/docs/architecture/004-COMPONENT_INVENTORY.md @@ -1,5 +1,5 @@ - + # Inventaire initial des composants KSP @@ -24,15 +24,15 @@ Ce document maintient l'inventaire synthétique des composants retenus ou presse | 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 | | On-chain HTTP | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.1` | JSON-RPC HTTP complet, settings, pools, rôles | -| Wallet | `ksp-wallet-lib` | lib | Retenu | `0.2.2` | `.kspwallet`, secrets, signature, import/export | -| Wallet Desk | `ksp-app-wallet-desk` | app | Retenu | `0.2.3` | Wallet + Config composite + HTTP/balance | -| Standard WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.4` | WebSocket Solana complet, sessions/subscriptions | -| Helius WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.5` | LaserStream WebSocket comme extension du moteur standard | -| Yellowstone | `ksp-onchain-transport-lib` | lib | Pressenti | `0.2.6` | client gRPC standard/provider-neutral | -| Off-chain price | `ksp-offchain-transport-lib` | lib | Retenu | `0.2.7` | première abstraction/provider de prix SOL/USD, SOL/EUR | -| Price Desk | nom à fixer | app | Retenu | `0.2.8` | visualisation/validation des prix | -| Wire | `ksp-interface-lib` | lib | Retenu | `0.2.9` | façade wire officielle + API publique wire | -| Program API | `ksp-program-api` | API | Retenu | `0.2.10` | contrats extensibles Program | +| Wallet | `ksp-wallet-lib` | lib | Retenu | `0.2.5` | `.kspwallet`, secrets, signature, import/export | +| Wallet Desk | `ksp-app-wallet-desk` | app | Retenu | `0.2.6` | Wallet + Config composite + HTTP/balance | +| 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 | +| 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 | +| Price Desk | nom à fixer | app | Retenu | `0.2.11` | visualisation/validation des prix | +| 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 impl. | `ksp-program-lib` | lib | Retenu | vertical slices ultérieurs | implementations Program officielles | | Program extension | `ksp-program--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 | @@ -146,7 +146,7 @@ Market Desk est progressive : V1 après les DEX prioritaires, puis enrichissemen ## Questions restantes - noms exacts de Price Desk et Backfill Desk ; -- surface exacte Yellowstone après audit normatif de `0.2.6-pre.001` ; +- surface exacte Yellowstone après audit normatif de `0.2.9-pre.001` ; - nécessité future d'un pool automatique WS ; - types exacts `ksp-program-api`/`ksp-materializer-api`/`ksp-store-api` ; - nom/packaging précis du premier RAW worker et du CORE normalizer ; diff --git a/docs/plans/000-README.md b/docs/plans/000-README.md index 0ae82e6..600168d 100644 --- a/docs/plans/000-README.md +++ b/docs/plans/000-README.md @@ -1,5 +1,5 @@ - + # Plans KSP @@ -16,7 +16,7 @@ Un plan décrit le périmètre, les décisions déjà acquises, les questions ou - [`005-V0_1_3_CONFIG_FOUNDATION_PLAN.md`](005-V0_1_3_CONFIG_FOUNDATION_PLAN.md) — plan historique clôturé de la release stable `0.1.3 — Configuration foundation`, établi par `0.1.3-pre.001`, exécuté jusqu'à `pre.015` puis publié par `0.1.3-rel.001`. - [`006-V0_1_4_CONFIG_DESKTOP_PLAN.md`](006-V0_1_4_CONFIG_DESKTOP_PLAN.md) — plan historique clôturé de la release stable `0.1.4 — ksp-app-config-desk`, établi par `0.1.4-pre.001` puis consolidé jusqu'à `0.1.4-rel.001`. - [`007-V0_2_0_SERIES_PLANNING.md`](007-V0_2_0_SERIES_PLANNING.md) — plan historique clôturé de la release stable `0.2.0`, ouvert par `pre.001`, consolidé par `pre.002`, audité par `pre.003` puis publié par `rel.001`; il fixe l'ordre `0.2.1+`, la stratégie RAW/CORE/DECODE/SPECIALIZED, les vertical slices Program et le prompt `0.2.1`. -- [`008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](008-V0_2_1_ONCHAIN_HTTP_PLAN.md) — plan actif de `0.2.1`, établi par `0.2.1-pre.001`; il contient l'inventaire officiel 52 méthodes HTTP courantes + 14 Deprecated historiques, l'audit bot3, le design Transport/Config et le split obligatoire de la couverture HTTP sur `0.2.1`–`0.2.6`. +- [`008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](008-V0_2_1_ONCHAIN_HTTP_PLAN.md) — plan actif de `0.2.1`, établi par `0.2.1-pre.001` puis recalibré par `0.2.1-pre.001-fix.001`; il contient l'inventaire officiel 52 méthodes HTTP courantes + 14 Deprecated historiques, l'audit bot3, le design Transport/Config et le split courant de la couverture HTTP sur `0.2.1`–`0.2.4`, avec enchaînement possible de releases dans une même session sous gate de sizing. Le `pre.001` de chaque release fonctionnelle peut introduire son propre plan détaillé lorsque la release s'ouvre. diff --git a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md index 117f0b6..69c7cbe 100644 --- a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +++ b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md @@ -1,5 +1,5 @@ - + # Séquence des releases fonctionnelles KSP @@ -15,6 +15,7 @@ Principes : - une release concrète `X.Y.Z` est une unité de travail/session dimensionnée ; - chaque release concrète possède ses propres prereleases ; - une release trop grosse est scindée au lieu d'être forcée dans une session ; +- 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. # Première série fonctionnelle : `0.1.x` @@ -355,23 +356,21 @@ Par défaut : ```text 0.2.1 HTTP transport foundation + 4 méthodes canari -0.2.2 HTTP Accounts + Tokens +0.2.2 HTTP Accounts + Tokens + Cluster 0.2.3 HTTP Transactions -0.2.4 HTTP Blocks -0.2.5 HTTP Cluster -0.2.6 HTTP Economics + compliance complète -0.2.7 wallet foundation (.kspwallet) -0.2.8 Wallet Desk -0.2.9 standard Solana WebSocket -0.2.10 Helius LaserStream WebSocket -0.2.11 Yellowstone gRPC standard foundation -0.2.12 off-chain price transport -0.2.13 price visualization desk -0.2.14 interface/wire foundation -0.2.15 program-api foundation +0.2.4 HTTP Blocks + Economics + compliance complète +0.2.5 wallet foundation (.kspwallet) +0.2.6 Wallet Desk +0.2.7 standard Solana WebSocket +0.2.8 Helius LaserStream WebSocket +0.2.9 Yellowstone gRPC standard foundation +0.2.10 off-chain price transport +0.2.11 price visualization desk +0.2.12 interface/wire foundation +0.2.13 program-api foundation ``` -`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. La couverture typée exhaustive reste verrouillée mais est répartie sur `0.2.1`–`0.2.6`. 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 @@ -381,17 +380,17 @@ Inclure : settings publics ; endpoint/provider/cluster ; pool logique ; rôles/c Le plan détaillé actif est `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`. Un appel raw/générique ne compte pas comme couverture typée des méthodes reportées. -## `0.2.2` à `0.2.6` — complétude HTTP Solana +## `0.2.2` à `0.2.4` — complétude HTTP Solana -- `0.2.2` : Accounts restants + Tokens ; -- `0.2.3` : Transactions, y compris write/submission technique et no-resend ambigu ; -- `0.2.4` : Blocks ; -- `0.2.5` : Cluster restant ; -- `0.2.6` : Economics + compliance finale des 52 méthodes courantes et 14 historiques Deprecated. +- `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.4` : 10 Blocks + 5 Economics = 15 méthodes, puis compliance finale des 52 méthodes courantes et 14 historiques Deprecated. + +Ces trois releases constituent le découpage nominal, pas une obligation de trois chats distincts. Une session qui clôture complètement une release plus vite que prévu peut ouvrir immédiatement la suivante si son sizing permet encore raisonnablement de la clôturer dans cette même session. Les releases restent séparées : version, prereleases, delta, validations et clôture stable propres à chacune. Chaque `pre.001` réaudite la documentation officielle actuelle. Les méthodes Deprecated réellement retirées restent tracées comme historiques/runtime removed au lieu d'être simulées. -## `0.2.7` — Wallet foundation +## `0.2.5` — Wallet foundation Mission : créer `ksp-wallet-lib` et le format `.kspwallet`. @@ -399,23 +398,23 @@ Inclure protection du secret, pubkey/identity, signature, import/export extensib Exclure : temporary wallet JSON historique et `WalletPolicy`. -## `0.2.8` — Wallet Desk +## `0.2.6` — Wallet Desk Mission : valider Config composite + `.kspwallet` + transport HTTP dans une application Tauri mince. Le solde d'un wallet constitue un premier cas de validation réseau obligatoire. -## `0.2.9` — WebSocket Solana standard +## `0.2.7` — WebSocket Solana standard 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. -## `0.2.10` — 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. -## `0.2.11` — Yellowstone gRPC standard +## `0.2.9` — Yellowstone gRPC standard Mission : introduire un backend Yellowstone standard/provider-neutral. @@ -423,21 +422,21 @@ 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. -## `0.2.12` / `0.2.13` — Off-chain price + app +## `0.2.10` / `0.2.11` — Off-chain price + app -`0.2.12` 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. -`0.2.13` ajoute une petite application desk de visualisation/validation. +`0.2.11` ajoute une petite application desk de visualisation/validation. Metadata HTTP/IPFS/Arweave viendra au premier besoin Metadata réel. -## `0.2.14` — 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. Aucune `ksp-interface-api` séparée n'est retenue pour l'instant. -## `0.2.15` — Program API foundation +## `0.2.13` — Program API foundation Introduire `ksp-program-api`, sans suffixe `-lib`, comme contrat d'extension Program. diff --git a/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md b/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md index b52a0d8..cd24e51 100644 --- a/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md +++ b/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md @@ -1,11 +1,11 @@ - + # `0.2.1-pre.001` — plan `ksp-onchain-transport-lib` HTTP Solana foundation ## 1. Statut et conclusion exécutive -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. +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`. Conclusion du gate : @@ -260,26 +260,26 @@ Colonnes : nom, catégorie, paramètres/config à préserver, forme de résultat | `getFirstAvailableBlock` | Blocks | aucun | u64 | Stable | Supporté | typed_adapter | `0.2.4` | empty params ; u64 | [Solana](https://solana.com/docs/rpc/http/getfirstavailableblock) | | `getRecentPerformanceSamples` | Blocks | limit? <= 720 | [PerformanceSample] | Stable | Supporté | typed_adapter | `0.2.4` | no params/limit ; nullable numNonVoteTransactions | [Solana](https://solana.com/docs/rpc/http/getrecentperformancesamples) | | `minimumLedgerSlot` | Blocks | aucun | u64 | Stable | Supporté | typed_adapter | `0.2.4` | empty params ; u64 | [Solana](https://solana.com/docs/rpc/http/minimumledgerslot) | -| `getClusterNodes` | Cluster | aucun | [ClusterNode] | Stable | Supporté | typed_adapter | `0.2.5` | nullable endpoints/features ; array | [Solana](https://solana.com/docs/rpc/http/getclusternodes) | -| `getEpochInfo` | Cluster | config? {commitment,minContextSlot} | EpochInfo | Stable | Supporté | typed_adapter | `0.2.5` | config ; transactionCount null | [Solana](https://solana.com/docs/rpc/http/getepochinfo) | -| `getEpochSchedule` | Cluster | aucun | EpochSchedule | Stable | Supporté | typed_adapter | `0.2.5` | empty params ; object | [Solana](https://solana.com/docs/rpc/http/getepochschedule) | +| `getClusterNodes` | Cluster | aucun | [ClusterNode] | Stable | Supporté | typed_adapter | `0.2.2` | nullable endpoints/features ; array | [Solana](https://solana.com/docs/rpc/http/getclusternodes) | +| `getEpochInfo` | Cluster | config? {commitment,minContextSlot} | EpochInfo | Stable | Supporté | typed_adapter | `0.2.2` | config ; transactionCount null | [Solana](https://solana.com/docs/rpc/http/getepochinfo) | +| `getEpochSchedule` | Cluster | aucun | EpochSchedule | Stable | Supporté | typed_adapter | `0.2.2` | empty params ; object | [Solana](https://solana.com/docs/rpc/http/getepochschedule) | | `getGenesisHash` | Cluster | aucun | string base58 | Stable | Supporté | typed_adapter | `0.2.1` | empty params ; hash string ; error | [Solana](https://solana.com/docs/rpc/http/getgenesishash) | | `getHealth` | Cluster | aucun | "ok" ou RPC unhealthy error | Stable | Supporté | typed_adapter | `0.2.1` | healthy ; unhealthy RPC error | [Solana](https://solana.com/docs/rpc/http/gethealth) | -| `getHighestSnapshotSlot` | Cluster | aucun | {full:u64,incremental:u64\|null} | Stable | Supporté | typed_adapter | `0.2.5` | incremental null ; no snapshot/error | [Solana](https://solana.com/docs/rpc/http/gethighestsnapshotslot) | -| `getIdentity` | Cluster | aucun | {identity:string} | Stable | Supporté | typed_adapter | `0.2.5` | empty params ; identity | [Solana](https://solana.com/docs/rpc/http/getidentity) | -| `getLeaderSchedule` | Cluster | slot? \| config? \| null ; config? {commitment,identity} | map identity->[slot_index] \| null | Stable | Supporté | typed_adapter | `0.2.5` | all overloads ; filter ; null | [Solana](https://solana.com/docs/rpc/http/getleaderschedule) | -| `getMaxRetransmitSlot` | Cluster | aucun | u64 | Stable | Supporté | typed_adapter | `0.2.5` | empty params ; u64 | [Solana](https://solana.com/docs/rpc/http/getmaxretransmitslot) | -| `getMaxShredInsertSlot` | Cluster | aucun | u64 | Stable | Supporté | typed_adapter | `0.2.5` | empty params ; u64 | [Solana](https://solana.com/docs/rpc/http/getmaxshredinsertslot) | -| `getSlot` | Cluster | config? {commitment,minContextSlot} | u64 | Stable | Supporté | typed_adapter | `0.2.5` | config ; u64 | [Solana](https://solana.com/docs/rpc/http/getslot) | -| `getSlotLeader` | Cluster | config? {commitment,minContextSlot} | string pubkey | Stable | Supporté | typed_adapter | `0.2.5` | config ; pubkey | [Solana](https://solana.com/docs/rpc/http/getslotleader) | -| `getSlotLeaders` | Cluster | startSlot ; limit 1..5000 | [string pubkey] | Stable | Supporté | typed_adapter | `0.2.5` | limit boundaries ; array | [Solana](https://solana.com/docs/rpc/http/getslotleaders) | +| `getHighestSnapshotSlot` | Cluster | aucun | {full:u64,incremental:u64\|null} | Stable | Supporté | typed_adapter | `0.2.2` | incremental null ; no snapshot/error | [Solana](https://solana.com/docs/rpc/http/gethighestsnapshotslot) | +| `getIdentity` | Cluster | aucun | {identity:string} | Stable | Supporté | typed_adapter | `0.2.2` | empty params ; identity | [Solana](https://solana.com/docs/rpc/http/getidentity) | +| `getLeaderSchedule` | Cluster | slot? \| config? \| null ; config? {commitment,identity} | map identity->[slot_index] \| null | Stable | Supporté | typed_adapter | `0.2.2` | all overloads ; filter ; null | [Solana](https://solana.com/docs/rpc/http/getleaderschedule) | +| `getMaxRetransmitSlot` | Cluster | aucun | u64 | Stable | Supporté | typed_adapter | `0.2.2` | empty params ; u64 | [Solana](https://solana.com/docs/rpc/http/getmaxretransmitslot) | +| `getMaxShredInsertSlot` | Cluster | aucun | u64 | Stable | Supporté | typed_adapter | `0.2.2` | empty params ; u64 | [Solana](https://solana.com/docs/rpc/http/getmaxshredinsertslot) | +| `getSlot` | Cluster | config? {commitment,minContextSlot} | u64 | Stable | Supporté | typed_adapter | `0.2.2` | config ; u64 | [Solana](https://solana.com/docs/rpc/http/getslot) | +| `getSlotLeader` | Cluster | config? {commitment,minContextSlot} | string pubkey | Stable | Supporté | typed_adapter | `0.2.2` | config ; pubkey | [Solana](https://solana.com/docs/rpc/http/getslotleader) | +| `getSlotLeaders` | Cluster | startSlot ; limit 1..5000 | [string pubkey] | Stable | Supporté | typed_adapter | `0.2.2` | limit boundaries ; array | [Solana](https://solana.com/docs/rpc/http/getslotleaders) | | `getVersion` | Cluster | aucun | {solana-core:string,feature-set:u32\|null} | Stable | Supporté | typed_adapter | `0.2.1` | empty params ; feature-set present/null | [Solana](https://solana.com/docs/rpc/http/getversion) | -| `getVoteAccounts` | Cluster | config? {commitment,votePubkey,keepUnstakedDelinquents,delinquentSlotDistance} | {current:[VoteAccount],delinquent:[VoteAccount]} | Stable | Supporté | typed_adapter | `0.2.5` | filters/config ; both sets | [Solana](https://solana.com/docs/rpc/http/getvoteaccounts) | -| `getInflationGovernor` | Economics | config? {commitment} | InflationGovernor | Stable | Supporté | typed_adapter | `0.2.6` | config ; f64 fields | [Solana](https://solana.com/docs/rpc/http/getinflationgovernor) | -| `getInflationRate` | Economics | aucun | {total,validator,foundation:f64,epoch:u64} | Stable | Supporté | typed_adapter | `0.2.6` | empty params ; object | [Solana](https://solana.com/docs/rpc/http/getinflationrate) | -| `getInflationReward` | Economics | addresses ; config? {commitment,epoch,minContextSlot} | [InflationReward\|null] | Stable | Supporté | typed_adapter | `0.2.6` | addresses/config ; reward/null ; commission null | [Solana](https://solana.com/docs/rpc/http/getinflationreward) | -| `getStakeMinimumDelegation` | Economics | config? {commitment,minContextSlot} | RpcResponse | Stable | Supporté | typed_adapter | `0.2.6` | config ; value | [Solana](https://solana.com/docs/rpc/http/getstakeminimumdelegation) | -| `getSupply` | Economics | config? {commitment,excludeNonCirculatingAccountsList} | RpcResponse | Stable | Supporté | typed_adapter | `0.2.6` | config true/false ; list semantics | [Solana](https://solana.com/docs/rpc/http/getsupply) | +| `getVoteAccounts` | Cluster | config? {commitment,votePubkey,keepUnstakedDelinquents,delinquentSlotDistance} | {current:[VoteAccount],delinquent:[VoteAccount]} | Stable | Supporté | typed_adapter | `0.2.2` | filters/config ; both sets | [Solana](https://solana.com/docs/rpc/http/getvoteaccounts) | +| `getInflationGovernor` | Economics | config? {commitment} | InflationGovernor | Stable | Supporté | typed_adapter | `0.2.4` | config ; f64 fields | [Solana](https://solana.com/docs/rpc/http/getinflationgovernor) | +| `getInflationRate` | Economics | aucun | {total,validator,foundation:f64,epoch:u64} | Stable | Supporté | typed_adapter | `0.2.4` | empty params ; object | [Solana](https://solana.com/docs/rpc/http/getinflationrate) | +| `getInflationReward` | Economics | addresses ; config? {commitment,epoch,minContextSlot} | [InflationReward\|null] | Stable | Supporté | typed_adapter | `0.2.4` | addresses/config ; reward/null ; commission null | [Solana](https://solana.com/docs/rpc/http/getinflationreward) | +| `getStakeMinimumDelegation` | Economics | config? {commitment,minContextSlot} | RpcResponse | Stable | Supporté | typed_adapter | `0.2.4` | config ; value | [Solana](https://solana.com/docs/rpc/http/getstakeminimumdelegation) | +| `getSupply` | Economics | config? {commitment,excludeNonCirculatingAccountsList} | RpcResponse | Stable | Supporté | typed_adapter | `0.2.4` | config true/false ; list semantics | [Solana](https://solana.com/docs/rpc/http/getsupply) | ## 6. Matrice exhaustive — 14 méthodes Deprecated historiques @@ -315,18 +315,18 @@ Résumé nom par nom : Le split retenu est : -| Release | Mission | Surface courante assignée | -|---------|------------------------------------|-----------------------------------------------------------------------------------------------------------------------------| -| `0.2.1` | **HTTP transport foundation** | 4 canaris : `getBalance`, `getGenesisHash`, `getHealth`, `getVersion` + registre 52/14 + infrastructure complète foundation | -| `0.2.2` | HTTP Accounts + Tokens | 5 Accounts restants + 5 Tokens = 10 | -| `0.2.3` | HTTP Transactions | 11 | -| `0.2.4` | HTTP Blocks | 10 | -| `0.2.5` | HTTP Cluster | 12 Cluster restants | -| `0.2.6` | HTTP Economics + compliance finale | 5 + gate exhaustif 52 courantes / 14 historiques | +| Release | Mission | Surface courante assignée | +|---------|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------| +| `0.2.1` | **HTTP transport foundation** | 4 canaris : `getBalance`, `getGenesisHash`, `getHealth`, `getVersion` + registre 52/14 + infrastructure complète foundation | +| `0.2.2` | HTTP Accounts + Tokens + Cluster | 5 Accounts restants + 5 Tokens + 12 Cluster restants = 22 | +| `0.2.3` | HTTP Transactions | 11 | +| `0.2.4` | HTTP Blocks + Economics + compliance finale | 10 Blocks + 5 Economics = 15 + gate exhaustif 52 courantes / 14 historiques | -La présence d'un appel JSON-RPC raw/générique dans `0.2.1` **ne comptera pas** comme couverture typée des méthodes affectées à `0.2.2`–`0.2.6`. +La présence d'un appel JSON-RPC raw/générique dans `0.2.1` **ne comptera pas** comme couverture typée des méthodes affectées à `0.2.2`–`0.2.4`. -Wallet est décalé à `0.2.7` et Wallet Desk à `0.2.8`. Le premier `getBalance` reste volontairement dans `0.2.1`, donc ce split ne retire pas la capacité réseau minimale dont Wallet Desk aura besoin. +Ces trois releases HTTP complémentaires représentent **trois sessions nominales au maximum**, pas trois chats obligatoires. Si une release est entièrement clôturée plus vite que prévu, la même session peut ouvrir puis clôturer la suivante après un nouveau gate de sizing positif. Les frontières restent strictement séparées : numéro de release, prereleases, version, delta, validations et clôture stable. + +Wallet est décalé à `0.2.5` et Wallet Desk à `0.2.6`. Le premier `getBalance` reste volontairement dans `0.2.1`, donc ce split ne retire pas la capacité réseau minimale dont Wallet Desk aura besoin. ## 8. Périmètre exact de la `0.2.1` réduite @@ -488,7 +488,7 @@ Invariants : - une réponse invalide devient `invalid_response`/`json_rpc_protocol`, jamais un faux résultat ; - le `data` d'une erreur RPC peut être préservé comme `serde_json::Value`, mais n'est pas loggué massivement par défaut. -Une API raw/générique peut exister pour l'extensibilité/provider interop. Elle ne remplace pas la surface typée normative et n'est pas une preuve de couverture des releases `0.2.2`–`0.2.6`. +Une API raw/générique peut exister pour l'extensibilité/provider interop. Elle ne remplace pas la surface typée normative et n'est pas une preuve de couverture des releases `0.2.2`–`0.2.4`. Pour la surface standard connue, l'exécuteur consulte le registry. Une méthode `runtime = Removed` est refusée comme méthode standard au lieu d'être envoyée en prétendant qu'elle est supportée. @@ -820,7 +820,7 @@ La canary de méthode utilise un inventaire statique versionné/audité ; elle n Explicitement reportés : -- les 48 méthodes courantes non canari selon la matrice `0.2.2`–`0.2.6` ; +- les 48 méthodes courantes non canari selon la matrice `0.2.2`–`0.2.4` ; - WebSocket Solana ; - LaserStream ; - Yellowstone gRPC ; @@ -851,7 +851,7 @@ La release peut devenir stable seulement si : - Config standard + schema + example + adapter fonctionnent dans le bon sens ; - README/USAGE expliquent API raw vs typed et limites de couverture de `0.2.1` ; - tests ciblés/workspace et cargo tree passent sur le poste de développement ; -- prompt `0.2.2 — HTTP Accounts + Tokens` prêt dans la dernière prerelease ; +- prompt `0.2.2 — HTTP Accounts + Tokens + Cluster` prêt dans la dernière prerelease ; - aucune méthode de la matrice n'est perdue du planning HTTP global. ## 22. Prévision souple des prereleases de la `0.2.1` réduite @@ -872,23 +872,23 @@ Ce découpage est révisable si une tranche dépasse le budget ; la release réd ```text 0.2.1 HTTP transport foundation + 4 canaris -0.2.2 HTTP Accounts + Tokens +0.2.2 HTTP Accounts + Tokens + Cluster 0.2.3 HTTP Transactions -0.2.4 HTTP Blocks -0.2.5 HTTP Cluster -0.2.6 HTTP Economics + compliance HTTP finale -0.2.7 wallet foundation (.kspwallet) -0.2.8 Wallet Desk -0.2.9 standard Solana WebSocket -0.2.10 Helius LaserStream WebSocket -0.2.11 Yellowstone gRPC standard foundation -0.2.12 off-chain price transport -0.2.13 price visualization desk -0.2.14 interface/wire foundation -0.2.15 program-api foundation +0.2.4 HTTP Blocks + Economics + compliance HTTP finale +0.2.5 wallet foundation (.kspwallet) +0.2.6 Wallet Desk +0.2.7 standard Solana WebSocket +0.2.8 Helius LaserStream WebSocket +0.2.9 Yellowstone gRPC standard foundation +0.2.10 off-chain price transport +0.2.11 price visualization desk +0.2.12 interface/wire foundation +0.2.13 program-api foundation ``` -Chaque release HTTP `0.2.2`–`0.2.6` commence par une **revérification officielle temporelle** de sa famille et de l'index global. Si Solana ajoute/supprime/change une méthode entre-temps, la matrice est mise à jour explicitement plutôt que de conserver aveuglément l'état du 2026-08-17. +Le découpage `0.2.2`–`0.2.4` est un **maximum nominal de trois sessions**. Une session peut clôturer plusieurs releases successives si, après la clôture complète de chacune, le sizing de la suivante reste positif. Cette optimisation de session ne fusionne jamais les releases elles-mêmes. + +Chaque release HTTP `0.2.2`–`0.2.4` commence par une **revérification officielle temporelle** de sa famille et de l'index global. Si Solana ajoute/supprime/change une méthode entre-temps, la matrice est mise à jour explicitement plutôt que de conserver aveuglément l'état du 2026-08-17. ## 24. Gate de sizing — réponse obligatoire diff --git a/prompts/006-V0_2_1_START_PROMPT.md b/prompts/006-V0_2_1_START_PROMPT.md index b425099..873e014 100644 --- a/prompts/006-V0_2_1_START_PROMPT.md +++ b/prompts/006-V0_2_1_START_PROMPT.md @@ -3,7 +3,7 @@ # Prompt de démarrage `0.2.1` — `ksp-onchain-transport-lib` HTTP Solana foundation -> **Statut : consommé par `0.2.1-pre.001`.** Le gate de sizing du 2026-08-17 a conclu que le périmètre monolithique décrit ci-dessous n'était pas clôturable raisonnablement dans une seule session. Le plan actif `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md` le remplace pour l'exécution : `0.2.1` devient la foundation + 4 canaris, et la couverture HTTP typée exhaustive est répartie sur `0.2.1`–`0.2.6`. Le présent document reste la trace du cahier des charges ayant ouvert l'audit ; ne pas le réutiliser comme prompt d'implémentation monolithique. +> **Statut : consommé par `0.2.1-pre.001`, puis recalibré par `0.2.1-pre.001-fix.001`.** Le gate de sizing du 2026-08-17 a conclu que le périmètre monolithique décrit ci-dessous n'était pas clôturable raisonnablement dans une seule session. `pre.001` a d'abord réparti la couverture HTTP sur `0.2.1`–`0.2.6`; le fix ramène ce découpage à `0.2.1`–`0.2.4`. Le plan actif `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md` porte le résultat courant : `0.2.1` devient la foundation + 4 canaris, puis `0.2.2`–`0.2.4` complètent les 48 méthodes restantes. Ces trois releases HTTP complémentaires représentent trois sessions nominales au maximum ; plusieurs releases peuvent être enchaînées dans une même session si chacune est complètement clôturée avant l'ouverture de la suivante et si le sizing restant le permet. Le présent document reste la trace du cahier des charges ayant ouvert l'audit ; ne pas le réutiliser comme prompt d'implémentation monolithique. ## 1. Contexte de reprise @@ -484,12 +484,12 @@ et vérifiant la complétude de la matrice de méthodes si elle peut être autom Ne pas ouvrir : -- WebSocket Solana — `0.2.9` ; -- Helius LaserStream WebSocket — `0.2.10` ; -- Yellowstone gRPC — `0.2.11` ; +- WebSocket Solana — `0.2.7` ; +- Helius LaserStream WebSocket — `0.2.8` ; +- Yellowstone gRPC — `0.2.9` ; - providers gRPC avancés ; -- Wallet — `0.2.7` ; -- Wallet Desk — `0.2.8` ; +- Wallet — `0.2.5` ; +- Wallet Desk — `0.2.6` ; - Store/persistence RAW — `0.3.1` ; - decoders Program ; - `ksp-interface-lib` fonctionnel complet ; @@ -605,10 +605,10 @@ Tranche actuelle, sans grosse implémentation. - README/USAGE ; - documentation durable ; - cleanup/TODO ; -- prompt `0.2.2 — HTTP Accounts + Tokens` ; +- prompt `0.2.2 — HTTP Accounts + Tokens + Cluster` ; - préparation `rel.001`. -Les méthodes typées restantes sont réparties sur `0.2.2`–`0.2.6` et restent toutes présentes dans la matrice du plan `008`. +Les méthodes typées restantes sont réparties sur `0.2.2`–`0.2.4` et restent toutes présentes dans la matrice du plan `008`. ## 18. Validation de chaque tranche Rust @@ -654,8 +654,8 @@ La release ne peut pas être déclarée stable tant que : - le graphe de dépendances est audité ; - `README.md` et `USAGE.md` sont complets ; - TODO/hors scope sont fermés ou reportés explicitement ; -- le prompt final `0.2.2 — HTTP Accounts + Tokens` est prêt ; -- les 48 méthodes courantes reportées restent affectées explicitement à `0.2.2`–`0.2.6` ; +- le prompt final `0.2.2 — HTTP Accounts + Tokens + Cluster` est prêt ; +- les 48 méthodes courantes reportées restent affectées explicitement à `0.2.2`–`0.2.4` ; - la release entière a été clôturée dans la session qui l'a ouverte. ## 20. Release suivante après split @@ -663,21 +663,19 @@ La release ne peut pas être déclarée stable tant que : La release suivante prévue est : ```text -0.2.2 — ksp-onchain-transport-lib / HTTP Accounts + Tokens +0.2.2 — ksp-onchain-transport-lib / HTTP Accounts + Tokens + Cluster ``` -Elle doit compléter les 5 méthodes Accounts restantes et les 5 méthodes Tokens, après revérification de la documentation officielle actuelle. +Elle doit compléter les 5 méthodes Accounts restantes, les 5 méthodes Tokens et les 12 méthodes Cluster restantes, après revérification de la documentation officielle actuelle. La suite HTTP reste : ```text 0.2.3 Transactions -0.2.4 Blocks -0.2.5 Cluster -0.2.6 Economics + compliance finale +0.2.4 Blocks + Economics + compliance finale ``` -Wallet passe à `0.2.7` et Wallet Desk à `0.2.8`. Le cœur cryptographique/format de Wallet restera indépendant du transport ; Wallet Desk composera ensuite Wallet et la surface HTTP stabilisée. +Wallet passe à `0.2.5` et Wallet Desk à `0.2.6`. Le cœur cryptographique/format de Wallet restera indépendant du transport ; Wallet Desk composera ensuite Wallet et la surface HTTP stabilisée. `0.2.2`, `0.2.3` et `0.2.4` sont trois releases/session nominales ; si l'une est clôturée rapidement, la suivante peut être ouverte dans le même chat, sans fusionner les frontières de version/delta/validation. ## Instruction d'ouverture