diff --git a/Cargo.toml b/Cargo.toml index 225819e..662f1e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 486 +# version: 487 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api"] [workspace.package] -version = "0.3.9-pre.7.fix.1" +version = "0.3.9-pre.7.fix.2" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs b/crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs index 537c6ac..3ee937c 100644 --- a/crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs +++ b/crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs @@ -1,5 +1,5 @@ // file: crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs -// version: 3 +// version: 4 #[derive(Clone, Copy)] enum FixtureMode { @@ -171,6 +171,15 @@ impl yellowstone_grpc_proto::geyser::geyser_server::Geyser for FixtureGeyser { return std::result::Result::Err(tonic::Status::unimplemented("deshred is outside KSP 0.2.9")); } + type SubscribeGossipStream = futures_util::stream::Empty>; + + async fn subscribe_gossip( + &self, + _request: tonic::Request, + ) -> std::result::Result, tonic::Status> { + return std::result::Result::Err(tonic::Status::unimplemented("gossip is outside KSP 0.2.9")); + } + async fn subscribe_replay_info( &self, request: tonic::Request, diff --git a/crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs b/crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs index 0becfad..b37b68a 100644 --- a/crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs +++ b/crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs @@ -1,5 +1,5 @@ // file: crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs -// version: 3 +// version: 4 #[derive(Clone, Default)] struct FixtureGeyser; @@ -31,6 +31,19 @@ impl yellowstone_grpc_proto::geyser::geyser_server::Geyser for FixtureGeyser { return std::result::Result::Err(tonic::Status::unimplemented("deshred is outside KSP 0.2.9")); } + type SubscribeGossipStream = std::pin::Pin< + std::boxed::Box< + dyn futures_util::Stream> + Send + 'static, + >, + >; + + async fn subscribe_gossip( + &self, + _request: tonic::Request, + ) -> std::result::Result, tonic::Status> { + return std::result::Result::Err(tonic::Status::unimplemented("gossip is outside KSP 0.2.9")); + } + async fn subscribe_replay_info( &self, request: tonic::Request, @@ -128,7 +141,7 @@ impl yellowstone_grpc_proto::geyser::geyser_server::Geyser for FixtureGeyser { return std::result::Result::Err(error); } return std::result::Result::Ok(tonic::Response::new(yellowstone_grpc_proto::geyser::GetVersionResponse { - version: "fixture-yellowstone-12.6".to_owned(), + version: "fixture-yellowstone-12.7".to_owned(), })); } } @@ -238,7 +251,7 @@ async fn yellowstone_unary_fixture_covers_all_seven_standard_methods_and_metadat assert_eq!(validity.slot(), 404); assert!(validity.valid()); let version = client.get_version().await.expect("version fixture must succeed"); - assert_eq!(version.version(), "fixture-yellowstone-12.6"); + assert_eq!(version.version(), "fixture-yellowstone-12.7"); let rendered = format!("{client:?} {channel:?}"); assert!(!rendered.contains("GRPC-SECRET-CANARY")); assert!(!rendered.contains(server.endpoint_url.as_str())); diff --git a/deltas/0.3.9/pre.007-fix.002.md b/deltas/0.3.9/pre.007-fix.002.md new file mode 100644 index 0000000..6e95e9d --- /dev/null +++ b/deltas/0.3.9/pre.007-fix.002.md @@ -0,0 +1,75 @@ + + + +# Delta `0.3.9-pre.007-fix.002` + +## 1. Objet + +Adopter explicitement les baselines workspace `jsonschema ^0.53` et `yellowstone-grpc-proto ^12.7`, puis adapter les deux fixtures serveur Yellowstone au RPC `SubscribeGossip` ajouté au service `Geyser` par le proto 12.7. Le correctif ne crée aucune fonctionnalité Gossip dans l'API ou le runtime KSP. + +## 2. Baseline et échec observé + +Entrée : `0.3.9-pre.7.fix.1`. + +Après le choix opérateur des nouvelles contraintes, le gate du 5 septembre 2026 établit : + +```text +Rust / Markdown audits PASS +cargo check --workspace PASS +jsonschema résolu 0.53.0 +yellowstone-grpc-proto résolu 12.7.0 +Transport release_completeness ciblé PASS 43/43 +clippy all-targets/all-features FAIL E0046 +workspace tests all-targets/all-features FAIL E0046 +ksp-worker-api PASS 28 + doc-tests +``` + +L'échec `E0046` ne concerne pas la surface cliente/runtime KSP : les deux implémentations de test `FixtureGeyser` ne satisfont plus le trait serveur généré, qui exige désormais `SubscribeGossipStream` et `subscribe_gossip`. + +## 3. Correction + +Les deux fixtures : + +```text +crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs +crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs +``` + +déclarent le nouveau stream Gossip et répondent `tonic::Status::unimplemented("gossip is outside KSP 0.2.9")`. Cette réponse est volontaire : `pre.007` est un couloir de gate et n'ouvre aucune nouvelle capability Transport. Le fixture de version Yellowstone est également aligné de `12.6` vers `12.7`. + +Le manifeste workspace devient : + +```text +jsonschema = { version = "^0.53", default-features = false } +yellowstone-grpc-proto = { version = "^12.7", default-features = false } +``` + +## 4. Version + +Le correctif modifie dépendances et tests : + +```text +workspace.package.version = 0.3.9-pre.7.fix.2 +``` + +## 5. Fichiers + +Modifiés : + +```text +Cargo.toml +crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs +crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs +docs/plans/030-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT_PLAN.md +docs/validation/026-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT.md +``` + +Ajouté : + +```text +deltas/0.3.9/pre.007-fix.002.md +``` + +## 6. Revalidation requise + +Après application, rejouer au minimum les audits, Clippy all-targets/all-features, le workspace test all-targets/all-features, le gate Worker API et les arbres Cargo. Les smokes live restent opt-in selon leur politique existante. diff --git a/docs/plans/030-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT_PLAN.md b/docs/plans/030-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT_PLAN.md index e818ab4..df2bc72 100644 --- a/docs/plans/030-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT_PLAN.md +++ b/docs/plans/030-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT_PLAN.md @@ -1,5 +1,5 @@ - + # Plan v0.3.9 — Worker API générique + audit RAW Transaction @@ -630,6 +630,12 @@ Budget cible : **10-15 min**. Fermer les gates workspace/Worker API, les arbres Le premier gate `pre.007` a échoué sur une canary historique de `ksp-onchain-transport-lib` qui inspectait littéralement des contraintes de versions externes dans le `Cargo.toml` racine, notamment `yellowstone-grpc-proto = ^12.6`. Cette responsabilité est globale au workspace et contrevient à `DEP-CARGO-007`, qui la réserve à la surface de gouvernance/fondation. Le correctif retire des deux canaries Yellowstone historiques les lectures/assertions de versions du manifeste racine et conserve leurs preuves propres au Transport : dépendances workspace locales, features nécessaires, absence de `yellowstone-grpc-client`, firewall Config et non-exposition des crates externes. La contrainte racine `^12.6` reste inchangée ; elle autorise déjà la résolution compatible `12.7.0` observée pendant le gate, sans pin arbitraire. La version Cargo devient `0.3.9-pre.7.fix.1`. +#### `pre.007-fix.002` — baseline Yellowstone 12.7 + adaptation des fixtures Geyser + +**Statut : livré ; correctif dépendances/tests, revalidation opérateur requise.** + +Après `fix.001`, l'opérateur choisit explicitement les baselines workspace `jsonschema = ^0.53` et `yellowstone-grpc-proto = ^12.7`. Le check workspace confirme l'adoption de `jsonschema 0.53.0`; Yellowstone 12.7 conserve les surfaces KSP utilisées mais ajoute au service protobuf `Geyser` le RPC serveur `SubscribeGossip`, ce qui rend incomplètes les deux implémentations fixtures de `unit_tests/grpc_unary.rs` et `unit_tests/grpc_stream.rs`. Le correctif implémente uniquement l'associated stream type et `subscribe_gossip` dans ces fixtures avec réponse `UNIMPLEMENTED`, sans exposer Gossip dans l'API Transport ni ouvrir une fonctionnalité `0.3.9`. Le fixture `GetVersion` est aligné sur `12.7`. Cargo devient `0.3.9-pre.7.fix.2`. + ### `pre.008` — réconciliation documentaire finale **Statut : prévu.** diff --git a/docs/validation/026-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT.md b/docs/validation/026-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT.md index d6865bf..74e057b 100644 --- a/docs/validation/026-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT.md +++ b/docs/validation/026-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT.md @@ -1,5 +1,5 @@ - + # Validation v0.3.9 — Worker API + audit RAW Transaction @@ -284,9 +284,22 @@ Le gate n'est donc pas fermé : l'unique défaut est traité par `pre.007-fix.00 - [X] Les deux canaries Yellowstone historiques de `ksp-onchain-transport-lib` ne lisent plus le `Cargo.toml` racine pour imposer des versions de dépendances workspace. - [X] Les assertions Transport propres à la crate sont conservées : consommation `.workspace = true`, features runtime/dev, absence de `yellowstone-grpc-client`, absence de dépendance Config et non-exposition de `tonic`/`yellowstone_grpc_proto`. - [X] Le correctif respecte `DEP-CARGO-007` : les politiques générales du workspace restent propriété de la surface fondation/Core. -- [X] La contrainte racine `yellowstone-grpc-proto = { version = "^12.6", default-features = false }` reste inchangée ; aucun pin `12.6.0` n'est introduit. +- [X] `fix.001` avait conservé la contrainte racine `yellowstone-grpc-proto = ^12.6`; cette décision de baseline est ensuite explicitement supersédée par `fix.002`. - [X] `workspace.package.version = 0.3.9-pre.7.fix.1`. -- [ ] Rejouer le gate `pre.007` sur `0.3.9-pre.7.fix.1`. +- [X] Revalidation ciblée de `tests/release_completeness.rs` : 43/43 PASS sous la résolution Yellowstone 12.7 observée ensuite. + +#### `pre.007-fix.002` — Yellowstone 12.7 et nouvelles obligations du trait serveur + +- [X] Baseline workspace `jsonschema = { version = "^0.53", default-features = false }`. +- [X] Baseline workspace `yellowstone-grpc-proto = { version = "^12.7", default-features = false }`. +- [X] Le log opérateur confirme `cargo check --workspace` avec `jsonschema 0.53.0` et `yellowstone-grpc-proto 12.7.0`. +- [X] Le log opérateur isole l'échec `E0046` aux deux fixtures serveur `FixtureGeyser` : nouveaux items requis `SubscribeGossipStream` et `subscribe_gossip`. +- [X] Les deux fixtures implémentent le nouveau RPC avec réponse `UNIMPLEMENTED`; aucune API Gossip de production n'est ajoutée. +- [X] Le fixture `GetVersion` est aligné sur `fixture-yellowstone-12.7`. +- [X] `workspace.package.version = 0.3.9-pre.7.fix.2`. +- [ ] Rejouer `cargo clippy --workspace --all-targets --all-features -- -D warnings`. +- [ ] Rejouer `cargo test --workspace --all-targets --all-features`. +- [ ] Rejouer le gate Worker/API et les arbres de dépendances avant fermeture définitive de `pre.007`. ### `pre.008` — réconciliation documentaire @@ -321,4 +334,4 @@ Après la synthèse multi-source `pre.006`, l'état courant est : workspace.package.version = 0.3.9-pre.6 ``` -`pre.002` reste la tranche non-fix `0.3.9-pre.2`. Les correctifs de conformité/compilation portent successivement `0.3.9-pre.2.fix.1` puis `0.3.9-pre.2.fix.2` conformément à `VER-ID-007` et `VER-ID-010`. `pre.003` reprend ensuite la séquence prerelease normale avec `0.3.9-pre.3`; son gate opérateur est PASS et freeze Worker API. `pre.004` poursuit avec `0.3.9-pre.4` sans changement runtime, uniquement l'audit standard Solana/KSP et la création de l'owner durable d'acquisition. `pre.005` passe à `0.3.9-pre.5` et enrichit cet owner avec l'audit Helius/Yellowstone/providers/kbot3 sans modifier le runtime. `pre.006` passe à `0.3.9-pre.6` et ferme la synthèse exhaustive possibilités/support/preuve ainsi que les handoffs `0.3.10`/`0.3.12`. `pre.006-fix.001` réécrit ensuite l'owner d'architecture comme synthèse Store-centrique et corrige la séparation Worker live / Job historique sans modifier Cargo ; `pre.006-fix.002` fixe `mainnet` comme identité canonique sans runtime. `pre.006-fix.003` matérialise finalement cette normalisation dans Config/Store/Transport/tests et porte la version Cargo `0.3.9-pre.6.fix.3`. `pre.007` ouvre ensuite le gate technique en `0.3.9-pre.7`; son premier passage révèle une canary Transport historique trop couplée au manifeste racine. `pre.007-fix.001` corrige cet ownership sans modifier la contrainte Yellowstone et porte Cargo en `0.3.9-pre.7.fix.1`. L'état précédent `0.3.9-pre.1.fix.2` reste documenté dans `pre.001-fix.002`. +`pre.002` reste la tranche non-fix `0.3.9-pre.2`. Les correctifs de conformité/compilation portent successivement `0.3.9-pre.2.fix.1` puis `0.3.9-pre.2.fix.2` conformément à `VER-ID-007` et `VER-ID-010`. `pre.003` reprend ensuite la séquence prerelease normale avec `0.3.9-pre.3`; son gate opérateur est PASS et freeze Worker API. `pre.004` poursuit avec `0.3.9-pre.4` sans changement runtime, uniquement l'audit standard Solana/KSP et la création de l'owner durable d'acquisition. `pre.005` passe à `0.3.9-pre.5` et enrichit cet owner avec l'audit Helius/Yellowstone/providers/kbot3 sans modifier le runtime. `pre.006` passe à `0.3.9-pre.6` et ferme la synthèse exhaustive possibilités/support/preuve ainsi que les handoffs `0.3.10`/`0.3.12`. `pre.006-fix.001` réécrit ensuite l'owner d'architecture comme synthèse Store-centrique et corrige la séparation Worker live / Job historique sans modifier Cargo ; `pre.006-fix.002` fixe `mainnet` comme identité canonique sans runtime. `pre.006-fix.003` matérialise finalement cette normalisation dans Config/Store/Transport/tests et porte la version Cargo `0.3.9-pre.6.fix.3`. `pre.007` ouvre ensuite le gate technique en `0.3.9-pre.7`; son premier passage révèle une canary Transport historique trop couplée au manifeste racine. `pre.007-fix.001` corrige cet ownership et porte Cargo en `0.3.9-pre.7.fix.1`. L'opérateur choisit ensuite les baselines `jsonschema ^0.53` et `yellowstone-grpc-proto ^12.7`; `pre.007-fix.002` adapte les fixtures serveur au nouveau RPC `SubscribeGossip` de Yellowstone 12.7 et porte Cargo en `0.3.9-pre.7.fix.2`. L'état précédent `0.3.9-pre.1.fix.2` reste documenté dans `pre.001-fix.002`.