Files
2026-08-18 06:41:41 +02:00

181 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: deltas/0.2.2/pre.001.md -->
<!-- version: 1 -->
# Delta `0.2.2-pre.001` — réaudit HTTP Accounts/Tokens/Cluster, DTOs et sizing
## Base requise
Release stable attendue :
```text
v0.2.1
```
L'archive KSP fournie porte `workspace.package.version = "0.2.1"`. Elle ne contient pas `.git`; le tag `v0.2.1` n'est donc pas revérifiable
localement depuis le zip.
## Objectif
Exécuter la première tranche obligatoire de `0.2.2` sans implémentation fonctionnelle lourde : relire les contrats KSP, réauditer la surface
HTTP Solana officielle actuelle, confirmer la matrice des 22 méthodes Accounts/Tokens/Cluster, cadrer les DTOs wire, évaluer les dépendances et
trancher le gate de sizing.
## Version Cargo
Conformément à `VER-ID-009`, la prerelease non-fix synchronise le signal technique :
```text
0.2.1 -> 0.2.2-pre.1
```
Aucune source Rust, dépendance Cargo ou configuration runtime n'est modifiée dans cette tranche.
## Résultats principaux
- index HTTP Solana courant réaudité : **52 méthodes** ;
- navigation Deprecated officielle : **14 méthodes historiques**, inchangées ;
- familles de la release : Accounts `6 = 1 acquis + 5 ciblés`, Tokens `5 = 5 ciblés`, Cluster `15 = 3 acquis + 12 ciblés` ;
- aucune méthode ajoutée/supprimée/déplacée détectée depuis l'audit `0.2.1` du 2026-08-17 ;
- les 22 méthodes ciblées restent des méthodes courantes non marquées Deprecated/Unstable et les descriptors KSP restent `Read + RetrySafe` ;
- `getMultipleAccounts` conserve la limite documentée de 100 adresses ;
- `getSlotLeaders` conserve la limite documentée `1..=5000` ;
- `getLargestAccounts` et `getProgramAccounts` documentent toujours `sortResults` ;
- `getProgramAccounts` conserve sa réponse bare par défaut et contextualisée avec `withContext=true` ;
- la source primaire Agave confirme trois filtres Program Accounts (`dataSize`, `memcmp`, `tokenAccountState`), 4 filtres max et 128 octets décodés max pour `memcmp` ;
- le wire Account requiert une union pour `data`, y compris le fallback `jsonParsed -> [base64]`, et `space` reste nullable ;
- `TokenAmount.uiAmount` reste nullable ;
- `getHighestSnapshotSlot` conserve `incremental: null` et la source officielle Agave confirme une erreur `NoSnapshot` en absence de snapshot ;
- `getLeaderSchedule` conserve son overload slot/config particulier ;
- `getVoteAccounts` conserve `current/delinquent` et les epoch credits triples; la source Agave courante borne cet historique RPC à 5 entrées par validator.
## Gate de sizing
Question obligatoire :
```text
Les 22 wrappers typés + DTOs partagés + tests + documentation peuvent-ils être clôturés proprement dans cette session ?
```
Réponse :
```text
OUI.
```
Aucun split de release n'est nécessaire. Le plan conserve `0.2.2` à 22 méthodes et répartit le travail sur DTOs communs, Accounts, Tokens,
Cluster simple, Cluster schedule/slot/vote puis clôture. Si une tranche réelle dépasse le budget KSP, elle sera scindée par une prerelease
supplémentaire sans déplacer de méthode hors `0.2.2`.
## Décisions prises
- conserver exactement la partition `4 / 22 / 11 / 15` de `0.2.1``0.2.4` ;
- ne pas reconstruire un transport par famille ; tous les wrappers passent par descriptor + `execute_standard_rpc` ;
- mutualiser `SolanaCommitment` et `SolanaRpcContext` sans casser les réexports `0.2.1` ;
- représenter Account data comme une forme wire discriminée, sans décodage Program/SPL ;
- conserver `jsonParsed.parsed` comme `serde_json::Value` dans Transport ;
- utiliser `ksp_core_lib::Pubkey` dans les DTOs publics, avec wire structs privés puis conversion explicite ;
- représenter le selector Token comme une union exclusive `mint` / `programId` ;
- représenter le résultat `getProgramAccounts` comme bare ou contextualisé selon `withContext` ;
- conserver les endpoints de `getClusterNodes` comme chaînes wire optionnelles au contrat public ;
- conserver les `null` documentés (`Account`, `space`, `uiAmount`, `transactionCount`, snapshot incremental, leader schedule) ;
- ne pas modifier Config : le contrat `std.transport` existant suffit ;
- ne pas ajouter `base64`, `bs58`, SPL, `solana-client` ou SDK RPC haut niveau à `pre.001`; les formes encodées `memcmp` peuvent rester des chaînes wire tant quaucun décodage local nest requis.
## Prévision de travail
```text
pre.001 audit officiel + matrice + DTOs + dépendances + sizing
pre.002 primitives/configs/results partagés + fixtures de base
pre.003 5 Accounts + tests
pre.004 5 Tokens + tests
pre.005 Cluster simple (7 méthodes) + tests
pre.006 Cluster schedule/slot/vote (5 méthodes) + tests
pre.007 canaries + smoke opt-in si utile + docs + prompt 0.2.3 + préparation stable
```
Une prerelease supplémentaire reste autorisée si le budget réel d'une tranche l'exige.
## Fichiers ajoutés
```text
docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md
deltas/0.2.2/pre.001.md
```
## Fichiers modifiés
```text
Cargo.toml
ROADMAP.md
docs/000-README.md
docs/plans/000-README.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
```
## Fichiers supprimés
Aucun.
## Fichiers volontairement inchangés
```text
CHANGELOG.md
docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md
docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
crates/ksp-onchain-transport-lib/src/**
crates/ksp-onchain-transport-lib/unit_tests/**
crates/ksp-onchain-transport-lib/tests/**
crates/ksp-config-lib/src/transport.rs
config/std.transport.json
config/schemas/std.transport.schema.json
```
Les deltas `0.2.1` restent historiques et ne sont pas réécrits.
## Validations exécutées
- relecture des sources KSP obligatoires du prompt `0.2.2` ;
- inspection de l'archive stable KSP fournie et de la foundation Transport `0.2.1` ;
- confirmation locale que le registry assigne déjà exactement les 22 méthodes ciblées à `HttpRpcCoverageRelease::V0_2_2` ;
- confirmation locale que ces 22 descriptors sont `Stable / Supported / Stable`, `Read`, `RetrySafe` ;
- consultation de l'index HTTP Solana officiel courant et des 22 pages de méthodes ciblées ;
- consultation de la navigation Deprecated officielle courante ;
- consultation de `Solana RPC JSON Structures` pour Account data et TokenAmount ;
- consultation des sources Agave `v3.1.8` liées par les pages officielles pour les ambiguïtés Account, filters/memcmp, cardinalités RPC, largest accounts, snapshot, leader schedule,
cluster node et vote accounts ;
- contrôle documentaire de la matrice `52 current / 14 historical / 4+22+11+15` ;
- contrôle de l'absence de nouvelle dépendance ou de besoin Config dans le design de `pre.001`.
## Validations non exécutées
Le sandbox courant ne fournit pas le binaire `cargo` (`command -v cargo` ne retourne aucun chemin). Les validations Cargo suivantes n'ont donc pas
été exécutées ici et doivent être rejouées sur le checkout de développement avant commit :
```bash
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
```
Aucun `cargo tree` n'est nécessaire dans cette tranche car aucune dépendance ni feature n'a changé. Les quatre vues `cargo tree` du prompt restent
obligatoires dès qu'une prerelease change une dépendance/feature et à la clôture.
L'archive KSP fournie ne contient pas `.git`; le commit attendu après application et validations suit `VER-GIT-001` :
```text
v0.2.2-pre.001
```
## Questions ouvertes
Aucune question bloquante pour `pre.002`.
Les détails exacts de nommage Rust des DTOs restent ajustables pendant leur implémentation, mais les invariants wire et frontières fixés par le
plan `009` ne doivent pas être relâchés pour simplifier artificiellement les wrappers.
## Suite
`0.2.2-pre.002` : introduire les primitives/configs/results partagés, mutualiser Context/Commitment, fixer les conversions wire et installer les
fixtures déterministes communes avant les wrappers Accounts.