v0.2.2-pre.007

This commit is contained in:
2026-08-18 09:48:11 +02:00
parent ecfb9500eb
commit b57f796187
16 changed files with 1020 additions and 78 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/000-README.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Validations KSP
@@ -12,3 +12,4 @@ Documents :
- [`001-V0_1_4_CONFIG_DESKTOP.md`](001-V0_1_4_CONFIG_DESKTOP.md) — matrice finale de `0.1.4 — ksp-app-config-desk`.
- [`002-V0_2_0_SERIES_PLANNING.md`](002-V0_2_0_SERIES_PLANNING.md) — matrice finale de la release stable `0.2.0`, avec audit de cohérence et preuves opérateur de `pre.003`.
- [`003-V0_2_1_ONCHAIN_HTTP.md`](003-V0_2_1_ONCHAIN_HTTP.md) — matrice de clôture de `0.2.1 — HTTP Solana foundation`, registry 52+14, résilience, Config -> Transport, quatre canaris et smoke Devnet opt-in.
- [`004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`](004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md) — matrice de clôture candidate de `0.2.2`, 22 wrappers Accounts/Tokens/Cluster, canaries 52+14, smoke Devnet Transport pur et préparation de `0.2.3`.

View File

@@ -0,0 +1,247 @@
<!-- file: docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md -->
<!-- version: 1 -->
# Validation finale `0.2.2` — HTTP Accounts + Tokens + Cluster
## Statut
Cette matrice accompagne la candidate `0.2.2-pre.007`. Elle ne publie pas encore la release stable : les preuves opérateur finales doivent être enregistrées avant `0.2.2-rel.001`.
Base fonctionnelle validée avant `pre.007` :
```text
v0.2.2-pre.006-fix.001
```
L'opérateur a validé cette base le 2026-08-18 avec :
```bash
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
```
Résultats Transport communiqués :
```text
127 unit tests passed
13 public API tests passed
6 release completeness passed
0 warning clippy signalé
```
## Réaudit officiel final
Le 2026-08-18, l'index officiel courant a été revérifié :
```text
https://solana.com/docs/rpc/http
https://solana.com/docs/rpc/deprecated/confirmtransaction
```
La matrice reste :
```text
52 méthodes HTTP courantes
14 méthodes historiques Deprecated
```
Répartition courante utile à cette release :
```text
Accounts : 6 = getBalance acquis en 0.2.1 + 5 en 0.2.2
Tokens : 5 = 5 en 0.2.2
Cluster : 15 = getGenesisHash/getHealth/getVersion acquis en 0.2.1 + 12 en 0.2.2
```
Aucune méthode `0.2.2` n'est reclassée Deprecated/Unstable. Les 22 descriptors restent `Stable / Supported / Read / RetrySafe`.
## Surface typée candidate
`0.2.2` ajoute exactement :
```text
Accounts : 5
Tokens : 5
Cluster : 12
Total : 22
```
Avec les quatre canaris de `0.2.1`, Transport expose donc 26 wrappers typed à la candidate.
Les partitions futures restent intactes :
```text
0.2.3 Transactions : 11
0.2.4 Blocks + Economics : 15
```
L'API raw `execute_standard_rpc()` reste disponible mais ne compte pas comme couverture typed d'une méthode future.
## Contrats wire à préserver
La candidate doit conserver notamment :
- `Account.data` legacy / encoded / `jsonParsed` sans décodage Program ;
- `Account.space: Option<u64>` ;
- comptes absents sous `null` ;
- `getProgramAccounts` bare vs contextualisé ;
- `TokenAmount.amount` et `uiAmountString` comme chaînes exactes ;
- `TokenAmount.uiAmount: Option<f64>` ;
- selector Token exclusif `Mint | ProgramId` ;
- `ClusterNode.clientId: Option<String>` ;
- `EpochInfo.transactionCount: Option<u64>` ;
- `SnapshotSlotInfo.incremental: Option<u64>` ;
- `getLeaderSchedule -> Option<schedule>` ;
- `VoteAccountInfo.inflationRewardsCommissionBps: Option<u16>` ;
- triplets `epochCredits` sans interprétation métier.
Limites locales figées :
```text
getMultipleAccounts <= 100
getProgramAccounts <= 4 filtres
memcmp raw <= 128 octets
getSlotLeaders 1..=5000
```
## Canaries de complétude
`tests/release_completeness.rs` protège :
```text
current == 52
historical == 14
partition == 4 / 22 / 11 / 15
0.2.1 exact == 4 canaris foundation
0.2.2 exact == 22 Accounts/Tokens/Cluster
0.2.3 count == 11 sans avancement typed prématuré
0.2.4 count == 15 sans avancement typed prématuré
historical => Deprecated + Removed + Historical + NotApplicable
```
Après `pre.007`, la suite attendue est :
```text
127 unit tests
13 public API tests
7 release completeness tests
1 smoke Transport live ignored par défaut
```
## Smoke Devnet Transport pur
Nouveau test :
```text
crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
```
Il construit `HttpTransportSettings` programmatiquement, sans Config ni environnement :
```text
https://api.devnet.solana.com
-> getAccountInfo(System Program)
-> getTokenSupply(mint de l'exemple Devnet officiel courant)
-> getEpochInfo
-> getVoteAccounts
```
Exécution explicite :
```bash
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
```
Le test est `ignored` par défaut. Un incident réseau/rate-limit ou la disparition d'un état externe documenté doit être analysé séparément ; il ne remplace jamais les fixtures HTTP locales.
## Smoke de composition Config -> Transport
Le smoke historique `0.2.1` reste disponible :
```bash
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
```
Il valide `Config -> profil devnet_public -> Transport -> quatre canaris foundation`.
Ownership : ce smoke cross-crates est transitoire. `ksp-config-lib` ne doit pas devenir la destination générale des smokes `Config + autre crate`; il migrera vers une future surface d'intégration/orchestration/demo appropriée.
## Dépendances, sécurité et logging
La candidate ne doit introduire :
```text
aucune dépendance externe nouvelle
aucune dépendance Transport -> Config/Store/Program
aucun tracing direct hors ksp-logging-lib
aucun client HTTP parallèle
```
Les invariants de sécurité `0.2.1` restent obligatoires : URL/provider credentials absents des diagnostics ordinaires, `reqwest::Error::without_url()` avant exposition comme source, aucune réponse/body massif journalisé par défaut.
La baseline Logging Transport reste `info` avant publication stable.
## Documentation candidate
Doivent être synchronisés :
```text
crates/ksp-onchain-transport-lib/README.md
crates/ksp-onchain-transport-lib/USAGE.md
docs/architecture/004-COMPONENT_INVENTORY.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md
ROADMAP.md
prompts/008-V0_2_3_START_PROMPT.md
```
`CHANGELOG.md` reste volontairement inchangé avant `rel.001`.
## Validations finales opérateur à exécuter sur `pre.007`
```bash
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
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
cargo tree -p ksp-config-lib -d
cargo tree -p ksp-config-lib -e features
cargo tree -p ksp-config-lib -e normal
```
Puis les deux smokes opt-in :
```bash
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
```
Les résultats doivent être reportés dans `rel.001`; cette matrice ne les anticipe pas.
## Passage à `rel.001`
Si toutes les validations passent, `rel.001` doit rester strictement publicationnel :
```text
workspace.package.version -> 0.2.2
ROADMAP : 0.2.2 -> [X]
CHANGELOG : synthèse stable 0.2.2
plan 009 / validation 004 : statut clôturé + preuves opérateur
deltas/0.2.2/rel.001.md
commit v0.2.2-rel.001
tag stable v0.2.2 après validation du commit
```
Aucune nouvelle méthode HTTP, aucun nouveau DTO et aucun nouveau comportement runtime ne doivent apparaître dans `rel.001`.