Files
khadhroony-solana-project/deltas/0.2.9/pre.002-fix.001.md

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.