311 lines
9.6 KiB
Markdown
311 lines
9.6 KiB
Markdown
<!-- file: deltas/0.2.1/pre.007.md -->
|
||
<!-- version: 1 -->
|
||
|
||
# Delta `v0.2.1-pre.007`
|
||
|
||
## Base
|
||
|
||
Base attendue :
|
||
|
||
```text
|
||
v0.2.1-pre.006-fix.002
|
||
```
|
||
|
||
Cette base 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-app-config-desk` ;
|
||
- `cargo test -p ksp-config-lib` ;
|
||
- `cargo test -p ksp-core-lib` ;
|
||
- `cargo test --workspace`.
|
||
|
||
Le test Transport renforcé contre la fuite d'URL dans les sources `reqwest::Error` passe également sur cette base.
|
||
|
||
Version Cargo cible :
|
||
|
||
```text
|
||
0.2.1-pre.7
|
||
```
|
||
|
||
## Objectif
|
||
|
||
Fermer la dernière prerelease fonctionnelle de `0.2.1` sans rouvrir le périmètre HTTP :
|
||
|
||
- revérifier la matrice officielle Solana ;
|
||
- figer la complétude `52 + 14` et la partition `4 / 22 / 11 / 15` par des canaries publiques ;
|
||
- fournir un smoke Devnet opt-in de bout en bout Config -> Transport ;
|
||
- produire le README et le guide d'utilisation durables de Transport ;
|
||
- remettre la baseline Logging Transport à `info` avant stable ;
|
||
- absorber les écarts documentaires réservés par l'audit complet de `pre.006-fix.002` ;
|
||
- produire la matrice de validation finale et le prompt de démarrage `0.2.2` ;
|
||
- préparer un `rel.001` strictement publicationnel.
|
||
|
||
Aucune cinquième méthode HTTP typée n'est ajoutée dans cette tranche.
|
||
|
||
## Revérification officielle HTTP Solana
|
||
|
||
La documentation officielle Solana a été revérifiée le 2026-08-17 :
|
||
|
||
```text
|
||
https://solana.com/docs/rpc/http
|
||
https://solana.com/docs/rpc/deprecated/confirmtransaction
|
||
```
|
||
|
||
Le résultat reste compatible avec la matrice acquise :
|
||
|
||
```text
|
||
52 méthodes HTTP courantes
|
||
14 méthodes historiques Deprecated
|
||
```
|
||
|
||
L'index courant confirme également le transport JSON-RPC 2.0 sur HTTP `POST` avec `Content-Type: application/json`.
|
||
|
||
Les 14 méthodes historiques restent représentées dans KSP comme `Deprecated / Removed / Historical` et ne sont pas simulées comme appelables.
|
||
|
||
## Canaries de complétude de release
|
||
|
||
Nouveau test public :
|
||
|
||
```text
|
||
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
|
||
```
|
||
|
||
Il fige depuis l'API publique :
|
||
|
||
```text
|
||
current == 52
|
||
historical == 14
|
||
coverage == 4 / 22 / 11 / 15
|
||
V0_2_1 == getBalance/getGenesisHash/getHealth/getVersion
|
||
historical => Deprecated + Removed + Historical + NotApplicable
|
||
```
|
||
|
||
La candidate déclare désormais **80 tests Transport**.
|
||
|
||
La surface raw/générique `execute_standard_rpc()` reste disponible mais ne compte pas comme couverture typée des 48 méthodes reportées à `0.2.2`–`0.2.4`.
|
||
|
||
## Smoke Devnet opt-in Config -> Transport
|
||
|
||
Nouveau test :
|
||
|
||
```text
|
||
crates/ksp-config-lib/tests/transport_devnet_smoke.rs
|
||
```
|
||
|
||
Il est volontairement :
|
||
|
||
```rust
|
||
#[ignore = "opt-in live Solana Devnet smoke; performs external network requests"]
|
||
```
|
||
|
||
Le chemin validé est :
|
||
|
||
```text
|
||
ConfigFileRegistry::defaults()
|
||
-> cfg.std.transport
|
||
-> profile devnet_public
|
||
-> ConfigEnvironment
|
||
-> ResolvedTransportConfig
|
||
-> HttpTransportSettings
|
||
-> HttpTransportPool
|
||
-> getHealth
|
||
-> getGenesisHash
|
||
-> getVersion
|
||
-> getBalance(System Program)
|
||
```
|
||
|
||
Transport ne lit donc toujours pas directement l'environnement.
|
||
|
||
Le test Config nécessite Tokio uniquement comme dev-dependency local :
|
||
|
||
```toml
|
||
[dev-dependencies]
|
||
tokio = { workspace = true, features = ["macros", "rt"] }
|
||
```
|
||
|
||
La candidate déclare **114 tests Config**, dont cet unique smoke Devnet `ignored`.
|
||
|
||
Exécution opt-in :
|
||
|
||
```bash
|
||
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
|
||
```
|
||
|
||
Un incident ou rate-limit du RPC public Devnet reste un signal externe à analyser ; les gates reproductibles restent les tests déterministes par défaut.
|
||
|
||
## Logging Transport avant stable
|
||
|
||
Le sink dédié introduit pendant le développement est conservé, mais sa baseline revient de `debug` à `info` conformément à la politique de clôture :
|
||
|
||
```text
|
||
output_id : file.onchain_transport.info
|
||
path : transport/onchain/ksp-onchain-transport.log
|
||
target : ksp-onchain-transport-lib
|
||
level : info
|
||
```
|
||
|
||
La console et le fichier général restent à `info`. Un niveau `debug`/`trace` ciblé peut être réactivé temporairement via Config lors d'un futur développement, puis doit être refermé avant publication stable.
|
||
|
||
## Documentation durable Transport
|
||
|
||
Nouveaux documents :
|
||
|
||
```text
|
||
crates/ksp-onchain-transport-lib/README.md
|
||
crates/ksp-onchain-transport-lib/USAGE.md
|
||
```
|
||
|
||
Ils documentent :
|
||
|
||
- responsabilités et firewall de dépendances ;
|
||
- registre `52 current + 14 historical` ;
|
||
- différence raw/générique vs couverture typée ;
|
||
- quatre canaris `0.2.1` ;
|
||
- pool/routing/admission/résilience ;
|
||
- retry/no-resend ;
|
||
- sécurité des URLs et sources `reqwest` ;
|
||
- target Logging explicite ;
|
||
- construction directe ou via Config ;
|
||
- snapshots et smoke Devnet opt-in.
|
||
|
||
## Normalisation documentaire issue de l'audit complet
|
||
|
||
Les écarts purement documentaires réservés par `pre.006-fix.002` sont absorbés ici :
|
||
|
||
- `FILE-GEN-003` décrit désormais `bindings/` et `gen/` comme artefacts générés/reconstructibles ignorés par défaut, et non comme convention encore future ;
|
||
- `crates/ksp-config-lib/README.md` ne présente plus `ksp-app-config-desk` comme future ;
|
||
- l'inventaire des composants décrit `0.2.1` comme foundation HTTP + registre `52+14` + quatre wrappers canari, et non comme surface typed HTTP complète ;
|
||
- les index docs/plans/validation/prompts sont synchronisés avec les nouveaux livrables ;
|
||
- le ROADMAP conserve uniquement l'état synthétique de la candidate et reste `[/]` jusqu'à la publication stable.
|
||
|
||
Les prompts et deltas historiques consommés restent immuables même lorsqu'ils décrivent l'état de leur époque.
|
||
|
||
## Matrice de validation finale
|
||
|
||
Nouveau document :
|
||
|
||
```text
|
||
docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
|
||
```
|
||
|
||
Il regroupe les critères de clôture, les preuves acquises, les commandes Cargo/cargo-tree attendues et les conditions de passage à `rel.001`.
|
||
|
||
## Prompt de reprise `0.2.2`
|
||
|
||
Nouveau prompt :
|
||
|
||
```text
|
||
prompts/007-V0_2_2_START_PROMPT.md
|
||
```
|
||
|
||
Il ouvre `0.2.2 — HTTP Accounts + Tokens + Cluster` par un nouveau `pre.001` d'audit/brainstorming/sizing et conserve la partition nominale actuelle de 22 méthodes :
|
||
|
||
```text
|
||
Accounts : 5
|
||
Tokens : 5
|
||
Cluster : 12
|
||
```
|
||
|
||
Il exige une revérification officielle du jour avant toute implémentation lourde et rappelle que l'appel raw ne vaut jamais couverture typée.
|
||
|
||
## Préparation de `rel.001`
|
||
|
||
`CHANGELOG.md` n'est volontairement pas modifié dans cette prerelease. Si la candidate passe les validations opérateur, `rel.001` doit rester minimal :
|
||
|
||
```text
|
||
workspace.package.version -> 0.2.1
|
||
ROADMAP : 0.2.1 -> [X]
|
||
CHANGELOG : synthèse stable 0.2.1
|
||
plan 008 / validation 003 : statut clôturé + preuves opérateur
|
||
deltas/0.2.1/rel.001.md
|
||
commit v0.2.1-rel.001
|
||
tag v0.2.1
|
||
```
|
||
|
||
Aucune nouvelle fonctionnalité HTTP ne doit être introduite dans `rel.001`.
|
||
|
||
## Fichiers ajoutés
|
||
|
||
```text
|
||
crates/ksp-config-lib/tests/transport_devnet_smoke.rs
|
||
crates/ksp-onchain-transport-lib/README.md
|
||
crates/ksp-onchain-transport-lib/USAGE.md
|
||
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
|
||
docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
|
||
prompts/007-V0_2_2_START_PROMPT.md
|
||
deltas/0.2.1/pre.007.md
|
||
```
|
||
|
||
## Fichiers modifiés
|
||
|
||
```text
|
||
Cargo.toml
|
||
ROADMAP.md
|
||
config/std.logging.json
|
||
crates/ksp-config-lib/Cargo.toml
|
||
crates/ksp-config-lib/README.md
|
||
docs/000-README.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
|
||
docs/rules/FILE_CONTRACTS.md
|
||
docs/validation/000-README.md
|
||
prompts/000-README.md
|
||
```
|
||
|
||
Aucun ancien delta et aucun `CHANGELOG.md` ne sont modifiés.
|
||
|
||
## Validation statique de génération
|
||
|
||
Effectuée dans le sandbox :
|
||
|
||
- comparaison différentielle avec `pre.006-fix.002` ;
|
||
- parsing de tous les TOML et JSON du workspace ;
|
||
- validation Draft 2020-12 de `std.logging.json`, `std.transport.json` et de l'exemple Transport contre leurs schemas ;
|
||
- contrôle des headers et incréments de version des fichiers modifiés ;
|
||
- contrôle de l'unique fin de ligne des fichiers livrés ;
|
||
- contrôle des lignes Rust/TOML <= 160 colonnes ;
|
||
- contrôle des fences Markdown et des liens Markdown relatifs des fichiers modifiés ;
|
||
- confirmation que les anciens deltas sont byte-for-byte inchangés ;
|
||
- contrôle de la baseline Logging Transport `info` ;
|
||
- comptage statique de 80 tests Transport et 114 tests Config, dont un smoke Config `ignored` ;
|
||
- contrôle des tableaux de registre Rust `[52]` et `[14]`.
|
||
|
||
Non exécutées dans le sandbox : `cargo`, `rustc` et `rustfmt` n'y sont pas disponibles. Aucune réussite Cargo de `pre.007` n'est donc déclarée avant validation opérateur.
|
||
|
||
## Validation requise après application
|
||
|
||
```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, de manière opt-in :
|
||
|
||
```bash
|
||
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
|
||
```
|
||
|
||
Les `cargo tree` Config sont requis car `pre.007` ajoute un dev-dependency Tokio local au smoke live. Si les validations déterministes et les audits de graphe sont propres, la tranche suivante est `0.2.1-rel.001`.
|