106 lines
3.6 KiB
Markdown
106 lines
3.6 KiB
Markdown
<!-- file: deltas/0.2.9/pre.002-fix.001.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
tokio::runtime::Handle::try_current()
|
|
```
|
|
|
|
avant l'appel à `connect_lazy()`. En l'absence de runtime actif, KSP retourne :
|
|
|
|
```text
|
|
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é :
|
|
|
|
```text
|
|
_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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
0.2.9-pre.2.fix.1
|
|
```
|
|
|
|
Commit attendu après validation :
|
|
|
|
```text
|
|
v0.2.9-pre.002-fix.001
|
|
```
|
|
|
|
## 5. Validation requise
|
|
|
|
```bash
|
|
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.
|