v0.3.9-pre.007-fix.002

This commit is contained in:
2026-09-05 15:27:43 +02:00
parent ecfa123a79
commit b0079fc3ee
6 changed files with 127 additions and 11 deletions

View File

@@ -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"

View File

@@ -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<std::result::Result<yellowstone_grpc_proto::geyser::SubscribeUpdateGossip, tonic::Status>>;
async fn subscribe_gossip(
&self,
_request: tonic::Request<yellowstone_grpc_proto::geyser::SubscribeGossipRequest>,
) -> std::result::Result<tonic::Response<Self::SubscribeGossipStream>, 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<yellowstone_grpc_proto::geyser::SubscribeReplayInfoRequest>,

View File

@@ -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<Item = std::result::Result<yellowstone_grpc_proto::geyser::SubscribeUpdateGossip, tonic::Status>> + Send + 'static,
>,
>;
async fn subscribe_gossip(
&self,
_request: tonic::Request<yellowstone_grpc_proto::geyser::SubscribeGossipRequest>,
) -> std::result::Result<tonic::Response<Self::SubscribeGossipStream>, 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<yellowstone_grpc_proto::geyser::SubscribeReplayInfoRequest>,
@@ -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()));

View File

@@ -0,0 +1,75 @@
<!-- file: deltas/0.3.9/pre.007-fix.002.md -->
<!-- version: 1 -->
# 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.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/030-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT_PLAN.md -->
<!-- version: 15 -->
<!-- version: 16 -->
# 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.**

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/026-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# 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`.