0.3.15-pre.014-fix.002
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
# file: Cargo.toml
|
||||
# version: 629
|
||||
# version: 630
|
||||
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-raw-transaction-ingest-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-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.3.15-pre.14.fix.1"
|
||||
version = "0.3.15-pre.14.fix.2"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-postgres-lib/unit_tests/raw_transaction.rs
|
||||
// version: 9
|
||||
// version: 10
|
||||
|
||||
fn network() -> ksp_store_api::RawNetworkId {
|
||||
return match ksp_store_api::RawNetworkId::new("devnet") {
|
||||
@@ -473,7 +473,7 @@ fn v0_3_15_pre_014_fix_001_incoming_truncated_logs_are_compatible_only_when_miss
|
||||
let mut stored_row = transaction_row("full");
|
||||
stored_row.signature = stored.reference().signature().as_bytes().to_vec();
|
||||
stored_row.slot_text = stored.slot().to_string();
|
||||
stored_row.block_time_unix_millis = stored.block_time().map(|value| return value.unix_millis());
|
||||
stored_row.block_time_unix_millis = stored.block_time().and_then(|value| return i64::try_from(value.unix_millis()).ok());
|
||||
stored_row.format_id = stored.payload().format_id().as_str().to_owned();
|
||||
stored_row.format_version = i64::from(stored.payload().format_version());
|
||||
stored_row.content_hash = stored.payload().content_hash().as_bytes().to_vec();
|
||||
|
||||
56
deltas/0.3.15/pre.014-fix.002.md
Normal file
56
deltas/0.3.15/pre.014-fix.002.md
Normal file
@@ -0,0 +1,56 @@
|
||||
<!-- file: deltas/0.3.15/pre.014-fix.002.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta v0.3.15-pre.014-fix.002 — correction de typage du gate `fix.001`
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
ksp-general-0.3.15-pre.014-fix.001.zip
|
||||
SHA-256 : 5be219224ea361d9e604943e79dd6eaad79f74679467ce0441408204d0a3912c
|
||||
bytes : 160680
|
||||
```
|
||||
|
||||
## Cause
|
||||
|
||||
Le gate opérateur de `pre.014-fix.001` passe les audits et `cargo check --workspace`, puis Clippy/tests compilant les tests de `ksp-store-postgres-lib` échouent sur `unit_tests/raw_transaction.rs` :
|
||||
|
||||
```text
|
||||
expected Option<i64>
|
||||
found Option<u64>
|
||||
```
|
||||
|
||||
Le test projette `RawTimestamp::unix_millis()` (`u64`) vers `RawTransactionRow::block_time_unix_millis` (`Option<i64>`). Le fixture porte `block_time=None`, mais la closure reste entièrement typée à la compilation.
|
||||
|
||||
## Correction
|
||||
|
||||
La projection du test utilise désormais une conversion bornée et non-panique :
|
||||
|
||||
```text
|
||||
block_time.map(unix_millis).and_then(i64::try_from(...).ok())
|
||||
```
|
||||
|
||||
La sémantique de production de `pre.014-fix.001` reste inchangée. Aucun `unwrap`, `expect`, `panic`, changement Store runtime, Transport ou Worker n'est introduit par ce fix.
|
||||
|
||||
## Résultat live déjà observé sur la base `fix.001`
|
||||
|
||||
Le run opérateur confirme que la compatibilité `logMessages` tronqués fonctionne en production : plusieurs observations Mainnet tronquées sont acceptées avec le domaine `store.raw_transaction.compatible_partial`, le canonique complet reste inchangé et aucun `content_conflict` n'est émis pour ces cas.
|
||||
|
||||
Le même run reproduit toutefois `grpc_backpressure_overflow` sur Yellowstone Mainnet à `22:09:54`, bien avant le Stop opérateur à `22:12:03`. Ce défaut appartient au couloir acquisition Yellowstone de `pre.013`. Conformément à `VER-LIFECYCLE-010`, il ouvrira une nouvelle prerelease dédiée après validation de ce fix ; il n'est pas mélangé à `pre.014-fix.002`.
|
||||
|
||||
## Validation opérateur
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo fmt --all -- --check
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.15
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||
cargo test -p ksp-store-postgres-lib --all-targets --all-features
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features
|
||||
cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features
|
||||
cargo test --workspace --all-targets --all-features
|
||||
```
|
||||
|
||||
Le live n'a pas besoin d'être rejoué pour valider la correction de typage elle-même ; le prochain live prolongé appartient à la prerelease acquisition dédiée.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
|
||||
<!-- version: 29 -->
|
||||
<!-- version: 30 -->
|
||||
|
||||
# Validation v0.3.15 — Raw Transaction Ingest Desk
|
||||
|
||||
@@ -986,3 +986,14 @@ canonique déjà complet
|
||||
Le canonical RAW n'est jamais remplacé par la version tronquée. Les cas suivants restent des `content_conflict` en `0.3.15` : préfixe différent avant le marqueur, autre champ `meta` différent, marqueur non exact ou multiple, canonique déjà tronqué puis version plus complète entrante. Ce dernier cas nécessite une promotion canonique atomique et appartient explicitement à `0.3.16`, avec variantes durables et historique de résolution ; il n'est pas simulé par un overwrite opportuniste dans ce fix.
|
||||
|
||||
Le correctif ne change aucune API publique Store/Worker, aucun schema SQL et aucun outcome public. `RawEntityWriteOutcome::AlreadyPresent` reste l'outcome canonique, l'observation entrante est conservée normalement et le Worker ne reçoit plus d'erreur pour le cas compatible démontré.
|
||||
|
||||
### `pre.014-fix.002` — correction du canari PostgreSQL et résultat live prolongé
|
||||
|
||||
Le gate opérateur de `pre.014-fix.001` confirme les audits statiques et `cargo check --workspace`, puis échoue pendant Clippy/tests sur le nouveau test PostgreSQL : `RawTimestamp::unix_millis()` renvoie `u64` alors que la ligne de test `RawTransactionRow::block_time_unix_millis` attend `Option<i64>`. Le fixture concerné utilise `block_time=None`, mais Rust doit tout de même typer la closure. `fix.002` remplace la projection de test par une conversion sûre `i64::try_from(...).ok()` ; aucun comportement de production n'est modifié.
|
||||
|
||||
Le même run live apporte deux preuves distinctes. D'abord, le comportement `fix.001` est confirmé sur plusieurs transactions Mainnet : le backend PostgreSQL accepte les `logMessages` entrants explicitement tronqués comme observations compatibles sans remplacer le canonique complet et sans produire de `content_conflict`. Les couples observés incluent `159/144`, `176/119`, `136/133` et `154/141` lignes `stored/incoming`.
|
||||
|
||||
Ensuite, un `grpc_backpressure_overflow` réapparaît sur Yellowstone Mainnet lors d'un run prolongé. Le WARN Transport survient à `22:09:54`, plus de deux minutes avant le Stop opérateur à `22:12:03`; il ne s'agit donc pas d'une race de shutdown. Le correctif `pre.013` a supprimé le couplage strictement séquentiel, mais sa file privée de `256` slots pending et ses `8` hydratations concurrentes ne suffisent pas lorsque le débit aval moyen reste durablement inférieur au débit gRPC. Conformément à `VER-LIFECYCLE-010`, cette anomalie du couloir acquisition Yellowstone ne sera pas mélangée à `pre.014-fix.002` : elle ouvre la prochaine prerelease dédiée, avant de rejouer le gate technique/live final.
|
||||
|
||||
Non-claims de `fix.002` : aucun changement de Transport, Worker runtime, Store production, politique de conflit ou capacité de queue. Le seul changement Rust est la correction de typage du test PostgreSQL.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user