6.5 KiB
Delta v0.2.1-pre.003
Base
Base attendue : v0.2.1-pre.002-fix.001, validée localement avant ouverture de cette tranche.
Version Cargo cible :
0.2.1-pre.3
Objectif
Matérialiser la première couche de client/routing HTTP de ksp-onchain-transport-lib sans encore exécuter de méthode JSON-RPC :
- client endpoint logique autour de
reqwest::Client; - pool logique KSP ;
- matching rôle/capability ;
- priorité globale ;
- round-robin équitable dans un même tier ;
- fallback lorsque les candidats plus prioritaires ne sont pas sélectionnables ;
- snapshots sûrs sans URL ;
- préparation des états passifs nécessaires à la résilience de
pre.004.
Cette tranche corrige également l'usage de ROADMAP.md afin de respecter son contrat existant : le ROADMAP décrit l'état synthétique et la planification majeure, pas l'historique des prereleases/fixes.
Modifications
Workspace
workspace.package.versionpasse de0.2.1-pre.2.fix.1à0.2.1-pre.3;reqwestreste centralisé sous[workspace.dependencies], avecdefault-features = false;- activation explicite de la feature
rustls, nécessaire à la construction réelle de clients HTTPS dans cette tranche ; - aucune feature
jsonn'est ajoutée : les envelopes JSON-RPC restent possédées par KSP viaserde_json; - aucune dépendance Tokio directe n'est ajoutée à Transport dans cette tranche.
HttpEndpointClient
Nouveau client endpoint logique :
- encapsule un
reqwest::Clientpartageable ; - applique
connect_timeout,request_timeoutetmax_idle_connections_per_hostdepuis les settings KSP ; - désactive les redirects automatiques ;
- désactive les proxies système/environnement implicites ;
- fixe un
User-AgentKSPksp-onchain-transport-lib/<version>; - conserve l'URL hors de toute surface
Debug/snapshot ; - expose uniquement identité, provider, cluster, état et capability matching sûrs.
Snapshots et état passif
Nouveaux contrats publics :
HttpEndpointAvailability
HttpEndpointRoleSnapshot
HttpEndpointSnapshot
HttpTransportPoolSnapshot
Les snapshots ne contiennent jamais l'URL endpoint.
HttpEndpointAvailability réserve :
Disabled
Available
Degraded
RateLimited
pre.003 ne produit activement que Disabled et Available. Les transitions Degraded / RateLimited appartiennent à pre.004 avec cooldown, limiter et observations runtime.
HttpTransportPool
Nouveaux contrats publics :
HttpTransportPool
HttpEndpointSelection
Algorithme concret de pre.003 :
- valider les settings Transport ;
- construire un client logique par endpoint ;
- exclure les endpoints disabled ;
- rechercher un rôle exact enabled ;
- exiger la capability exacte ou
*; - choisir la plus faible priorité numérique ;
- appliquer un round-robin par couple rôle/request-kind dans ce meilleur tier ;
- utiliser un tier moins prioritaire lorsque les candidats plus prioritaires ne sont pas sélectionnables ;
- retourner
endpoint_selection_failedsi aucun candidat n'existe.
Le mutex synchrone du pool protège uniquement les curseurs de fairness et ne couvre aucune I/O ni aucun await réseau.
select_for_method() dérive le request_kind depuis le registre central et appelle ensure_runtime_supported() avant sélection ; une méthode historique Removed ne peut donc pas être routée comme méthode standard.
ROADMAP
ROADMAP.md est ramené à son rôle défini par FILE_CONTRACTS.md :
- suppression des lignes servant de journal
0.2.1-pre.*/fix.*; - conservation d'un état synthétique de
0.2.0; - état synthétique courant de
0.2.1; - conservation des releases fonctionnelles
0.2.1+et de leur planification majeure.
Aucune règle normative nouvelle n'est nécessaire : cette correction applique le contrat ROADMAP.md déjà documenté.
Plan 008
Le plan est synchronisé avec :
- la feature TLS réellement retenue ;
- la politique client
reqwest; - le statut réalisé de
pre.003; - l'état exact après la tranche ;
- le report explicite des limiteurs/concurrence/cooldown/retry effectifs à
pre.004.
Tests ajoutés
La crate Transport passe de 40 à 53 tests déclarés.
Nouvelles preuves :
- snapshot client sans URL/secret ;
- endpoint disabled visible mais non sélectionnable ;
- matching rôle/wildcard capability ;
- priorité globale ;
- round-robin dans le meilleur tier ;
- fallback depuis un endpoint plus prioritaire disabled ;
- filtrage capability avant priorité ;
- erreur structurée lorsque rien ne correspond ;
- routing d'une méthode standard via son descriptor ;
- snapshot pool sûr conservant les endpoints disabled ;
- consommation du nouveau pool depuis l'API publique.
Hors périmètre conservé
Restent à pre.004 :
- token bucket RPS/burst ;
- semaphore/max concurrent ;
- cooldown après
429; - deadline effective de sélection/exécution ;
- retry/backoff effectif ;
- classification des erreurs
reqwestpendant une requête ; - transitions runtime
Degraded/RateLimited.
Restent à pre.005+ :
- exécution JSON-RPC HTTP ;
- méthodes canari typées ;
- document Config standard et adapter ;
- smoke tests réseau.
Sources externes revérifiées
Pour reqwest 0.13 :
- dépôt/documentation officielle
reqwest: rustls est le backend TLS de référence actuel ; - changelog
reqwest: en0.13, la feature historiquerustls-tlsa été renomméerustls; ClientBuilderofficiel :connect_timeout,timeout,pool_max_idle_per_host,redirectetno_proxysont disponibles sur le client async retenu.
Validation
Non exécutée dans le sandbox de génération : cargo et rustc n'y sont pas installés.
À exécuter après application :
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
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
Les quatre cargo tree doivent être rejoués dans cette tranche car le feature-set de reqwest change avec l'activation de rustls.
Suite
Tranche suivante prévue :
0.2.1-pre.004
Périmètre : RPS/burst, concurrence, cooldown/429, timeout/deadline et retry/backoff borné, avec respect strict de TransportRetryClass et interdiction de resend après dispatch ambigu.