3.6 KiB
Delta 0.2.9-pre.002-fix.001 — Clippy + runtime Tokio du channel lazy
1. Déclencheur
Le premier gate opérateur de pre.002 a fourni les preuves suivantes :
cargo fmt --all PASS
audit_rust_workspace_rules.py PASS / clean
cargo check --workspace PASS avec warning channel dead_code
cargo clippy --workspace --all-targets FAIL implicit_return dans grpc_settings test
cargo test -p ksp-onchain-transport-lib FAIL 344/345 : connect_lazy hors runtime Tokio
cargo test -p ksp-core-lib --test workspace_dependencies PASS 3/3
cargo tree Transport / duplicates fournis et inspectés
Le test gRPC a révélé que tonic::transport::Endpoint::connect_lazy() nécessite un reactor Tokio actif et peut paniquer s'il est appelé depuis un contexte synchrone sans runtime. Ce comportement doit être borné dans la surface KSP au lieu d'être laissé comme précondition implicite Tonic.
2. Corrections
Clippy
La closure qui génère l'inventaire d'endpoints excessif dans unit_tests/grpc_settings.rs utilise désormais un return explicite, conformément à clippy::implicit_return = deny.
Runtime Tokio
YellowstoneGrpcChannel::prepare() vérifie maintenant :
tokio::runtime::Handle::try_current()
avant l'appel à connect_lazy(). En l'absence de runtime actif, KSP retourne :
onchain_transport/grpc_channel_failed
avec uniquement endpoint_name comme contexte sûr. L'URL et le message interne Tonic ne sont pas réémis.
Le test positif devient un #[tokio::test(flavor = "current_thread")]. Un nouveau test synchrone prouve que l'absence de runtime est retournée comme erreur sans exposer l'URL canari.
Champ Tonic
Le channel reste un champ de production. Il n'est pas placé sous #[cfg(test)], car pre.002 matérialise réellement la ressource physique N1 qui sera consommée en pre.003.
Le champ privé est temporairement nommé :
_channel: tonic::transport::Channel
pour exprimer qu'il est intentionnellement conservé mais pas encore consommé par une opération de production dans cette tranche. Cela supprime le warning dead_code sans modifier la shape production/test.
3. Graphe Cargo observé
Le gate opérateur confirme :
tonic 0.14.6
yellowstone-grpc-proto 12.6.0
prost/prost-types 0.14.4
solana-pubkey 4.3.0 unifié
http 1.5.0
hyper 1.11.0
hyper-util 0.1.20
tower 0.5.3
bytes 1.12.1
Les occurrences Prost 0.14.4 dans --duplicates viennent des unités runtime/build (prost-build, tonic-prost-build) de la même version ; aucune seconde version concurrente n'est introduite.
4. Version
Le fix touche le code/runtime ; la version workspace devient :
0.2.9-pre.2.fix.1
Commit attendu après validation :
v0.2.9-pre.002-fix.001
5. Validation requise
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
cargo test -p ksp-core-lib --test workspace_dependencies
cargo test --workspace
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib --duplicates
cargo tree --duplicates
Le passage à pre.003 est interdit tant que ces gates ne sont pas verts ou qu'un nouvel écart n'est pas traité par un fix supplémentaire.