v0.3.9-pre.007-fix.002
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 486
|
# version: 487
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
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"]
|
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]
|
[workspace.package]
|
||||||
version = "0.3.9-pre.7.fix.1"
|
version = "0.3.9-pre.7.fix.2"
|
||||||
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/unit_tests/grpc_stream.rs
|
// file: crates/ksp-onchain-transport-lib/unit_tests/grpc_stream.rs
|
||||||
// version: 3
|
// version: 4
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
enum FixtureMode {
|
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"));
|
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(
|
async fn subscribe_replay_info(
|
||||||
&self,
|
&self,
|
||||||
request: tonic::Request<yellowstone_grpc_proto::geyser::SubscribeReplayInfoRequest>,
|
request: tonic::Request<yellowstone_grpc_proto::geyser::SubscribeReplayInfoRequest>,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs
|
// file: crates/ksp-onchain-transport-lib/unit_tests/grpc_unary.rs
|
||||||
// version: 3
|
// version: 4
|
||||||
|
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
struct FixtureGeyser;
|
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"));
|
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(
|
async fn subscribe_replay_info(
|
||||||
&self,
|
&self,
|
||||||
request: tonic::Request<yellowstone_grpc_proto::geyser::SubscribeReplayInfoRequest>,
|
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::Err(error);
|
||||||
}
|
}
|
||||||
return std::result::Result::Ok(tonic::Response::new(yellowstone_grpc_proto::geyser::GetVersionResponse {
|
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_eq!(validity.slot(), 404);
|
||||||
assert!(validity.valid());
|
assert!(validity.valid());
|
||||||
let version = client.get_version().await.expect("version fixture must succeed");
|
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:?}");
|
let rendered = format!("{client:?} {channel:?}");
|
||||||
assert!(!rendered.contains("GRPC-SECRET-CANARY"));
|
assert!(!rendered.contains("GRPC-SECRET-CANARY"));
|
||||||
assert!(!rendered.contains(server.endpoint_url.as_str()));
|
assert!(!rendered.contains(server.endpoint_url.as_str()));
|
||||||
|
|||||||
75
deltas/0.3.9/pre.007-fix.002.md
Normal file
75
deltas/0.3.9/pre.007-fix.002.md
Normal 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.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/plans/030-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT_PLAN.md -->
|
<!-- 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
|
# 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`.
|
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
|
### `pre.008` — réconciliation documentaire finale
|
||||||
|
|
||||||
**Statut : prévu.**
|
**Statut : prévu.**
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/validation/026-V0_3_9_WORKER_API_RAW_TRANSACTION_AUDIT.md -->
|
<!-- 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
|
# 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 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] 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] 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`.
|
- [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
|
### `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
|
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`.
|
||||||
|
|||||||
Reference in New Issue
Block a user