v0.2.9-pre.009-fix.001
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 249
|
# version: 250
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"]
|
members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.2.9-pre.9"
|
version = "0.2.9-pre.9.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-onchain-transport-lib/src/grpc_subscribe.rs
|
// file: crates/ksp-onchain-transport-lib/src/grpc_subscribe.rs
|
||||||
// version: 7
|
// version: 8
|
||||||
|
|
||||||
const MAX_GRPC_BLOCKHASH_TEXT_LENGTH_BYTES: usize = 128;
|
const MAX_GRPC_BLOCKHASH_TEXT_LENGTH_BYTES: usize = 128;
|
||||||
const MAX_GRPC_BLOCK_VECTOR_COUNT: usize = 65_536;
|
const MAX_GRPC_BLOCK_VECTOR_COUNT: usize = 65_536;
|
||||||
@@ -2478,7 +2478,7 @@ pub enum YellowstoneSubscribeUpdate {
|
|||||||
/// Slot lifecycle update.
|
/// Slot lifecycle update.
|
||||||
Slot(crate::YellowstoneSlotUpdate),
|
Slot(crate::YellowstoneSlotUpdate),
|
||||||
/// Full transaction update.
|
/// Full transaction update.
|
||||||
Transaction(crate::YellowstoneTransactionUpdate),
|
Transaction(std::boxed::Box<crate::YellowstoneTransactionUpdate>),
|
||||||
/// Lightweight transaction-status update.
|
/// Lightweight transaction-status update.
|
||||||
TransactionStatus(crate::YellowstoneTransactionStatusUpdate),
|
TransactionStatus(crate::YellowstoneTransactionStatusUpdate),
|
||||||
/// Full block update.
|
/// Full block update.
|
||||||
@@ -3679,7 +3679,9 @@ pub(crate) fn yellowstone_subscribe_update_from_wire(
|
|||||||
return match kind {
|
return match kind {
|
||||||
1 => decode_account_update(wire).map(crate::YellowstoneSubscribeUpdate::Account),
|
1 => decode_account_update(wire).map(crate::YellowstoneSubscribeUpdate::Account),
|
||||||
2 => decode_slot_update(wire).map(crate::YellowstoneSubscribeUpdate::Slot),
|
2 => decode_slot_update(wire).map(crate::YellowstoneSubscribeUpdate::Slot),
|
||||||
3 => decode_transaction_update(wire).map(crate::YellowstoneSubscribeUpdate::Transaction),
|
3 => decode_transaction_update(wire).map(|update| {
|
||||||
|
return crate::YellowstoneSubscribeUpdate::Transaction(std::boxed::Box::new(update));
|
||||||
|
}),
|
||||||
4 => decode_transaction_status_update(wire).map(crate::YellowstoneSubscribeUpdate::TransactionStatus),
|
4 => decode_transaction_status_update(wire).map(crate::YellowstoneSubscribeUpdate::TransactionStatus),
|
||||||
5 => decode_block_update(wire).map(crate::YellowstoneSubscribeUpdate::Block),
|
5 => decode_block_update(wire).map(crate::YellowstoneSubscribeUpdate::Block),
|
||||||
6 => decode_ping_update(wire).map(crate::YellowstoneSubscribeUpdate::Ping),
|
6 => decode_ping_update(wire).map(crate::YellowstoneSubscribeUpdate::Ping),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-onchain-transport-lib/tests/public_api.rs
|
// file: crates/ksp-onchain-transport-lib/tests/public_api.rs
|
||||||
// version: 46
|
// version: 47
|
||||||
|
|
||||||
//! Integration tests for the public `ksp-onchain-transport-lib` consumer contract.
|
//! Integration tests for the public `ksp-onchain-transport-lib` consumer contract.
|
||||||
|
|
||||||
@@ -973,6 +973,7 @@ fn public_v0_2_9_pre_008_yellowstone_blocks_contract_is_available_from_crate_roo
|
|||||||
#[test]
|
#[test]
|
||||||
fn public_v0_2_9_pre_009_yellowstone_bidi_session_contract_is_available_from_crate_root() {
|
fn public_v0_2_9_pre_009_yellowstone_bidi_session_contract_is_available_from_crate_root() {
|
||||||
fn assert_send<T: Send>() {
|
fn assert_send<T: Send>() {
|
||||||
|
let _ = std::marker::PhantomData::<T>;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
assert_send::<ksp_onchain_transport_lib::SolanaYellowstoneGrpcSubscribeSession>();
|
assert_send::<ksp_onchain_transport_lib::SolanaYellowstoneGrpcSubscribeSession>();
|
||||||
|
|||||||
75
deltas/0.2.9/pre.009-fix.001.md
Normal file
75
deltas/0.2.9/pre.009-fix.001.md
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
<!-- file: deltas/0.2.9/pre.009-fix.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta `0.2.9-pre.009-fix.001` — hygiène Clippy du flux bidi
|
||||||
|
|
||||||
|
## 1. Objet
|
||||||
|
|
||||||
|
Supprimer les deux warnings Clippy observés au gate opérateur de `pre.009`, sans modifier le protocole Yellowstone, le lifecycle bidi, les bornes ni les dépendances.
|
||||||
|
|
||||||
|
## 2. Gate opérateur avant fix
|
||||||
|
|
||||||
|
| Gate | Résultat |
|
||||||
|
|------------------------------------------|-------------------|
|
||||||
|
| `cargo fmt --all` | PASS |
|
||||||
|
| audit Rust workspace | PASS / clean |
|
||||||
|
| `cargo check --workspace` | PASS |
|
||||||
|
| `cargo clippy --workspace --all-targets` | PASS + 2 warnings |
|
||||||
|
| Transport unit | 379/379 PASS |
|
||||||
|
| Transport `public_api` | 48/48 PASS |
|
||||||
|
| Transport `release_completeness` | 42/42 PASS |
|
||||||
|
| Transport doctests | 4/4 PASS |
|
||||||
|
| Core dependency canary | 3/3 PASS |
|
||||||
|
| `cargo test --workspace` | PASS |
|
||||||
|
|
||||||
|
Warnings :
|
||||||
|
|
||||||
|
```text
|
||||||
|
clippy::large_enum_variant
|
||||||
|
YellowstoneSubscribeUpdate::Transaction >= 664 bytes
|
||||||
|
YellowstoneSubscribeUpdate::Block >= 280 bytes
|
||||||
|
|
||||||
|
clippy::extra_unused_type_parameters
|
||||||
|
assert_send<T: Send>() dans tests/public_api.rs
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Correctifs
|
||||||
|
|
||||||
|
### 3.1 `YellowstoneSubscribeUpdate::Transaction`
|
||||||
|
|
||||||
|
La variante devient :
|
||||||
|
|
||||||
|
```rust
|
||||||
|
Transaction(Box<YellowstoneTransactionUpdate>)
|
||||||
|
```
|
||||||
|
|
||||||
|
Le décodeur alloue cette indirection uniquement pour les updates transaction. Le DTO `YellowstoneTransactionUpdate`, le wire protobuf et les autres variantes ne changent pas. La queue bidi n’a plus à dimensionner chaque élément sur la variante transaction de ~664 octets.
|
||||||
|
|
||||||
|
### 3.2 Canari `Send`
|
||||||
|
|
||||||
|
Le helper de test conserve `T: Send` et matérialise `PhantomData<T>` dans son corps. Le paramètre générique devient réellement utilisé sans construction réseau ni changement de contrat.
|
||||||
|
|
||||||
|
## 4. Frontières inchangées
|
||||||
|
|
||||||
|
```text
|
||||||
|
reconnect / resubscribe / replay OUT -> pre.010
|
||||||
|
SubscribeDeshred OUT 0.2.9
|
||||||
|
PublicNode / Config V3 OUT pre.009
|
||||||
|
dépendances / features inchangées
|
||||||
|
```
|
||||||
|
|
||||||
|
Aucun `#[allow(clippy::...)]` n’est ajouté.
|
||||||
|
|
||||||
|
## 5. Gate attendu
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
Attendu : Clippy sans warning et compteurs fonctionnels inchangés à 379 unit / 48 public API / 42 release-completeness / 4 doctests.
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
|
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
|
||||||
<!-- version: 18 -->
|
<!-- version: 19 -->
|
||||||
|
|
||||||
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
|
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
|
||||||
|
|
||||||
> **Statut : `0.2.9-pre.008-fix.001` est fermée sur gate opérateur sans warning : fmt/audit/check/Clippy/workspace PASS, Transport 370 unit + 47 public API + 41 completeness + 4 doctests. `0.2.9-pre.009` est candidate : stream bidi standard réel, mutation request, Ping/Pong, backpressure, half-close et shutdown borné ; reconnect/replay restent `pre.010`.**
|
> **Statut : `0.2.9-pre.009` est fonctionnellement verte sur gate opérateur (Transport 379 unit + 48 public API + 42 completeness + 4 doctests, workspace PASS), mais Clippy signale deux warnings d’hygiène. `0.2.9-pre.009-fix.001` est candidate pour les supprimer sans modifier le protocole ni le lifecycle ; reconnect/replay restent `pre.010`.**
|
||||||
|
|
||||||
## 1. Objet, base et état d'ouverture
|
## 1. Objet, base et état d'ouverture
|
||||||
|
|
||||||
@@ -934,8 +934,8 @@ pre.007 DONE — standard Solana : Transactions + transaction_status
|
|||||||
pre.008 DONE — standard Solana : Blocks + block_meta + entry
|
pre.008 DONE — standard Solana : Blocks + block_meta + entry
|
||||||
budget : 15–20 min ; gate final fix.001 : fmt/audit/check/Clippy/workspace PASS sans warning + Transport 370/47/41/4
|
budget : 15–20 min ; gate final fix.001 : fmt/audit/check/Clippy/workspace PASS sans warning + Transport 370/47/41/4
|
||||||
|
|
||||||
pre.009 CANDIDATE — moteur partagé : bidi mutation + Ping/Pong + half-close + backpressure + shutdown
|
pre.009 FIX.001 CANDIDATE — moteur partagé : bidi mutation + Ping/Pong + half-close + backpressure + shutdown
|
||||||
budget : 15–20 min ; preuve : fixture locale bidi + bounded queues + half-close/drop/timeout déterministes
|
budget : 15–20 min ; gate fonctionnel 379/48/42/4 + workspace PASS ; fix de deux warnings Clippy
|
||||||
|
|
||||||
pre.010 moteur partagé : reconnect/resubscribe + from_slot/ReplayInfo + gaps/duplicates
|
pre.010 moteur partagé : reconnect/resubscribe + from_slot/ReplayInfo + gaps/duplicates
|
||||||
budget : 15–20 min ; preuve : reconnect local déterministe + aucune promesse lossless
|
budget : 15–20 min ; preuve : reconnect local déterministe + aucune promesse lossless
|
||||||
@@ -1371,3 +1371,20 @@ Le reconnect est volontairement absent de `pre.009` : un server half-close est n
|
|||||||
|
|
||||||
**Gate candidat :** audit statique clean ; fixture locale couvre round-trip, mutation, Ping/Pong, server half-close, client half-close, shutdown hostile borné, Drop best-effort, update overflow, Status distant sûr, update malformed et rejet outbound oversized. Compilation/Clippy/tests opérateur requis avant fermeture.
|
**Gate candidat :** audit statique clean ; fixture locale couvre round-trip, mutation, Ping/Pong, server half-close, client half-close, shutdown hostile borné, Drop best-effort, update overflow, Status distant sûr, update malformed et rejet outbound oversized. Compilation/Clippy/tests opérateur requis avant fermeture.
|
||||||
|
|
||||||
|
## 27. `pre.009-fix.001` — compaction de l’update transaction et hygiène du canari `Send`
|
||||||
|
|
||||||
|
Le gate opérateur de `pre.009` valide intégralement le comportement bidi : fmt/audit/check passent ; Transport passe 379/379 unit, 48/48 public API, 42/42 release-completeness et 4/4 doctests ; le dependency canary Core passe 3/3 et `cargo test --workspace` est vert. Clippy termine avec succès mais signale deux warnings :
|
||||||
|
|
||||||
|
```text
|
||||||
|
large_enum_variant YellowstoneSubscribeUpdate::Transaction
|
||||||
|
extra_unused_type_parameters assert_send<T: Send>() dans tests/public_api.rs
|
||||||
|
```
|
||||||
|
|
||||||
|
Le fix applique deux corrections sans `allow` :
|
||||||
|
|
||||||
|
- `YellowstoneSubscribeUpdate::Transaction` transporte désormais `Box<YellowstoneTransactionUpdate>`. La queue ne réserve donc plus la taille de la variante transaction (~664 octets) pour chaque élément ; le wire et le DTO transaction eux-mêmes restent inchangés. La modification intervient avant fermeture de la candidate `pre.009`.
|
||||||
|
- le canari `assert_send<T: Send>()` matérialise `PhantomData<T>` afin que le paramètre générique soit effectivement utilisé tout en conservant exactement la même preuve compile-time.
|
||||||
|
|
||||||
|
Aucun changement n’est apporté aux neuf variantes wire, à la mutation request, à Ping/Pong, au half-close, au shutdown, à la backpressure, aux dépendances ou aux frontières de `pre.010`.
|
||||||
|
|
||||||
|
**Gate fix requis :** fmt/audit/check/Clippy sans warning + Transport 379/48/42/4 + dependency canary + workspace.
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
||||||
<!-- version: 19 -->
|
<!-- version: 20 -->
|
||||||
|
|
||||||
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
|
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
|
||||||
|
|
||||||
> **Statut : `pre.008-fix.001` est fermée sur gate opérateur sans warning : fmt/audit/check/Clippy/workspace PASS, Transport 370 unit + 47 public API + 41 completeness + 4 doctests. `pre.009` est candidate pour le bidi standard, mutation request, Ping/Pong, backpressure, half-close et shutdown borné ; reconnect/replay restent `pre.010`.**
|
> **Statut : `pre.009` est fonctionnellement verte : Transport 379 unit + 48 public API + 42 completeness + 4 doctests et workspace PASS. Clippy signale deux warnings d’hygiène ; `pre.009-fix.001` est candidate pour les supprimer sans changement de protocole/lifecycle.**
|
||||||
|
|
||||||
## 1. Autorités du gate
|
## 1. Autorités du gate
|
||||||
|
|
||||||
@@ -411,7 +411,7 @@ pre.005 DONE standard: accounts + slots 15
|
|||||||
pre.006 DONE structure: namespace privé HTTP `http_*` 15–20 min ; gate PASS
|
pre.006 DONE structure: namespace privé HTTP `http_*` 15–20 min ; gate PASS
|
||||||
pre.007 DONE standard: transactions + transaction_status 15–20 min ; gate PASS
|
pre.007 DONE standard: transactions + transaction_status 15–20 min ; gate PASS
|
||||||
pre.008 DONE standard: blocks + block_meta + entry 15–20 min ; gate final fix.001 PASS sans warning
|
pre.008 DONE standard: blocks + block_meta + entry 15–20 min ; gate final fix.001 PASS sans warning
|
||||||
pre.009 CANDIDATE moteur: bidi/backpressure/half-close/shutdown 15–20 min ; fixture locale adversariale
|
pre.009 FIX.001 CANDIDATE moteur: bidi/backpressure/half-close/shutdown 15–20 min ; gate fonctionnel vert, 2 warnings Clippy
|
||||||
pre.010 TODO moteur: reconnect/replay/gap/duplicate 15–20 min
|
pre.010 TODO moteur: reconnect/replay/gap/duplicate 15–20 min
|
||||||
pre.011 TODO Config V3 + protocol/provider + profils PublicNode 15–20 min
|
pre.011 TODO Config V3 + protocol/provider + profils PublicNode 15–20 min
|
||||||
pre.012 TODO PublicNode live + compliance + docs/prompt 0.2.10 15–20 min
|
pre.012 TODO PublicNode live + compliance + docs/prompt 0.2.10 15–20 min
|
||||||
@@ -886,30 +886,31 @@ Le warning provient uniquement de `minimal_transaction_info()` dans `unit_tests/
|
|||||||
|
|
||||||
## 27. Gate `pre.009` — bidi standard + backpressure + half-close + shutdown candidate
|
## 27. Gate `pre.009` — bidi standard + backpressure + half-close + shutdown candidate
|
||||||
|
|
||||||
| Surface / invariant | État candidate |
|
| Surface / invariant | État candidate |
|
||||||
|-------------------------------------------------|----------------|
|
|-------------------------------------------------|-------------------|
|
||||||
| workspace version | `0.2.9-pre.9` |
|
| workspace version | `0.2.9-pre.9` |
|
||||||
| `/geyser.Geyser/Subscribe` bidi | SOURCE+TEST |
|
| `/geyser.Geyser/Subscribe` bidi | SOURCE+TEST |
|
||||||
| request initial dans queue bornée | SOURCE+TEST |
|
| request initial dans queue bornée | SOURCE+TEST |
|
||||||
| mutation `try_update()` ordonnée/non bloquante | SOURCE+TEST |
|
| mutation `try_update()` ordonnée/non bloquante | SOURCE+TEST |
|
||||||
| aucune `unbounded_channel` | CANARY |
|
| aucune `unbounded_channel` | CANARY |
|
||||||
| decode des 9 variantes standard | SOURCE+TEST |
|
| decode des 9 variantes standard | SOURCE+TEST |
|
||||||
| server Ping -> ping-only id=1 | SOURCE+TEST |
|
| server Ping -> ping-only id=1 | SOURCE+TEST |
|
||||||
| Pong observable | SOURCE+TEST |
|
| Pong observable | SOURCE+TEST |
|
||||||
| server half-close => `Ok(None)` | SOURCE+TEST |
|
| server half-close => `Ok(None)` | SOURCE+TEST |
|
||||||
| client close => request half-close | SOURCE+TEST |
|
| client close => request half-close | SOURCE+TEST |
|
||||||
| shutdown hostile borné par `close_timeout` | SOURCE+TEST |
|
| shutdown hostile borné par `close_timeout` | SOURCE+TEST |
|
||||||
| Drop session => half-close best-effort | SOURCE+TEST |
|
| Drop session => half-close best-effort | SOURCE+TEST |
|
||||||
| slow receiver => terminal backpressure overflow | SOURCE+TEST |
|
| slow receiver => terminal backpressure overflow | SOURCE+TEST |
|
||||||
| Status distant sans message/details secrets | SOURCE+TEST |
|
| Status distant sans message/details secrets | SOURCE+TEST |
|
||||||
| update malformed => invalid response | SOURCE+TEST |
|
| update malformed => invalid response | SOURCE+TEST |
|
||||||
| max inbound Tonic | SOURCE+TEST |
|
| max inbound Tonic | SOURCE+TEST |
|
||||||
| outbound encoded_len avant dispatch | SOURCE+TEST |
|
| outbound encoded_len avant dispatch | SOURCE+TEST |
|
||||||
| reconnect/resubscribe/replay | OUT pre.009 |
|
| reconnect/resubscribe/replay | OUT pre.009 |
|
||||||
| `SubscribeDeshred` | OUT 0.2.9 |
|
| `SubscribeDeshred` | OUT 0.2.9 |
|
||||||
| PublicNode / Config V3 | OUT pre.009 |
|
| PublicNode / Config V3 | OUT pre.009 |
|
||||||
| audit Rust workspace local | PASS / clean |
|
| audit Rust workspace local | PASS / clean |
|
||||||
| fmt/check/Clippy/tests/workspace | opérateur TODO |
|
| fmt/check/tests/workspace | PASS |
|
||||||
|
| Clippy | PASS + 2 warnings |
|
||||||
|
|
||||||
Les helpers protobuf qui étaient test-only jusqu'à `pre.008` sont maintenant compilés en runtime parce que `grpc_stream` les consomme effectivement. Aucun helper raw n'est public : les frontières restent `YellowstoneSubscribeRequest` et `YellowstoneSubscribeUpdate`.
|
Les helpers protobuf qui étaient test-only jusqu'à `pre.008` sont maintenant compilés en runtime parce que `grpc_stream` les consomme effectivement. Aucun helper raw n'est public : les frontières restent `YellowstoneSubscribeRequest` et `YellowstoneSubscribeUpdate`.
|
||||||
|
|
||||||
@@ -917,5 +918,25 @@ Le flux sortant utilise la même `mpsc` bornée que celle fournie à `tonic::cli
|
|||||||
|
|
||||||
`pre.009` ne tente aucun reconnect. Un half-close serveur est terminal normal ; `Status`, decode invalide et overflow sont terminaux en erreur. Le budget de reconnect, l'ordre de resubscribe, `from_slot`/ReplayInfo, gaps, duplicates et node divergence restent exclusivement `pre.010`.
|
`pre.009` ne tente aucun reconnect. Un half-close serveur est terminal normal ; `Status`, decode invalide et overflow sont terminaux en erreur. Le budget de reconnect, l'ordre de resubscribe, `from_slot`/ReplayInfo, gaps, duplicates et node divergence restent exclusivement `pre.010`.
|
||||||
|
|
||||||
**Verdict candidat :** source/fixture/audit statique prêts ; gate Cargo opérateur requis.
|
**Verdict `pre.009` :** contrat fonctionnel validé ; fix Clippy-only requis avant fermeture.
|
||||||
|
|
||||||
|
## 28. Gate `pre.009-fix.001` — taille de l’enum update + canari `Send`
|
||||||
|
|
||||||
|
| Gate / observation | Résultat `pre.009` | Correctif `fix.001` |
|
||||||
|
|------------------------------------------|-------------------------------------------|---------------------------------------------------|
|
||||||
|
| `cargo fmt --all` | PASS | à réexécuter |
|
||||||
|
| audit Rust workspace | PASS / clean | PASS local / clean |
|
||||||
|
| `cargo check --workspace` | PASS | contrat inchangé |
|
||||||
|
| `cargo clippy --workspace --all-targets` | PASS + 2 warnings | boxing Transaction + usage réel de `T` |
|
||||||
|
| Transport unit | 379/379 PASS | contrat attendu inchangé |
|
||||||
|
| Transport `public_api` | 48/48 PASS | contrat attendu inchangé |
|
||||||
|
| Transport `release_completeness` | 42/42 PASS | contrat attendu inchangé |
|
||||||
|
| Transport doctests | 4/4 PASS | contrat attendu inchangé |
|
||||||
|
| Core dependency canary | 3/3 PASS | dépendances inchangées |
|
||||||
|
| `cargo test --workspace` | PASS | contrat attendu inchangé |
|
||||||
|
| `large_enum_variant` | Transaction ~664 B, Block ~280 B | `Transaction(Box<YellowstoneTransactionUpdate>)` |
|
||||||
|
| `extra_unused_type_parameters` | helper `assert_send<T>()` n’utilise pas T | `PhantomData<T>` matérialise l’usage compile-time |
|
||||||
|
|
||||||
|
Le boxing ne modifie ni le protobuf ni `YellowstoneTransactionUpdate` : il réduit uniquement la taille du discriminant public transporté dans la queue bidi. Le canari `Send` conserve la même contrainte et ne construit aucune session réseau. Aucun `allow` Clippy n’est ajouté.
|
||||||
|
|
||||||
|
**Verdict fix candidate :** correction minimale prête ; fermeture de `pre.009` après gate opérateur sans warning.
|
||||||
|
|||||||
Reference in New Issue
Block a user