0.3.15-pre.012-fix.003

This commit is contained in:
2026-09-16 22:22:48 +02:00
parent 888ce3f35f
commit d56de4ace9
4 changed files with 90 additions and 16 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml # file: Cargo.toml
# version: 624 # version: 625
[workspace] [workspace]
resolver = "3" 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"] 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] [workspace.package]
version = "0.3.15-pre.12.fix.2" version = "0.3.15-pre.12.fix.3"
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"

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs // file: crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs
// version: 12 // version: 13
//! Desktop scaffold contract canaries for Raw Transaction Ingest Desk. //! Desktop scaffold contract canaries for Raw Transaction Ingest Desk.
@@ -313,21 +313,15 @@ fn pre_012_window_shutdown_and_start_stop_races_are_bounded_backend_owned() {
fn pre_012_fix_002_terminal_fault_logging_keeps_safe_route_identity_and_worker_cause_counters() { fn pre_012_fix_002_terminal_fault_logging_keeps_safe_route_identity_and_worker_cause_counters() {
let runtime = read_text(app_root().join("src/route_runtime.rs").as_path()); let runtime = read_text(app_root().join("src/route_runtime.rs").as_path());
let start = runtime.find("pub(crate) async fn monitor(self)"); let start = runtime.find("pub(crate) async fn monitor(self)");
let start = match start { assert!(start.is_some(), "missing RouteRuntimeLaunch::monitor");
std::option::Option::Some(value) => value, let std::option::Option::Some(start) = start else {
std::option::Option::None => { return;
assert!(false, "missing RouteRuntimeLaunch::monitor");
return;
},
}; };
let remainder = &runtime[start..]; let remainder = &runtime[start..];
let end = remainder.find("/// Starts one exact route Worker"); let end = remainder.find("/// Starts one exact route Worker");
let end = match end { assert!(end.is_some(), "missing route runtime monitor end marker");
std::option::Option::Some(value) => value, let std::option::Option::Some(end) = end else {
std::option::Option::None => { return;
assert!(false, "missing route runtime monitor end marker");
return;
},
}; };
let monitor = &remainder[..end]; let monitor = &remainder[..end];
for required in [ for required in [

View File

@@ -0,0 +1,70 @@
<!-- file: deltas/0.3.15/pre.012-fix.003.md -->
<!-- version: 1 -->
# Delta `0.3.15-pre.012-fix.003`
## Base
```text
base archive : ksp-general-0.3.15-pre.012-fix.002.zip
base SHA-256 : b8b0026a46f301449b9eaacc689eb4bbc9747381d1f4ff5bc5bb8e35bcf57d37
base version : 0.3.15-pre.12.fix.2
```
## Motif du fix
Le gate opérateur de `pre.012-fix.002` échoue uniquement sous Clippy strict : deux branches du nouveau canari terminal utilisent `assert!(false, ...)`, rejeté par `clippy::assertions_on_constants` avec `-D warnings`. Les tests Desk/Worker exécutés séparément passent, et le live Mainnet ne reproduit pas le terminal `Unhealthy/Faulted` : Yellowstone et HTTP Block Polling terminent proprement avec diagnostic terminal sans fault ni compteur d'erreur.
## Correction
Le canari `pre_012_fix_002_terminal_fault_logging_keeps_safe_route_identity_and_worker_cause_counters` conserve les mêmes bornes de surface, mais remplace les deux assertions constantes par une assertion dynamique `Option::is_some()` suivie d'un `let-else` sans `panic!`, `unreachable!`, `unwrap()` ni `expect()`.
Aucun code de production n'est modifié.
## Version
```text
workspace.package.version : 0.3.15-pre.12.fix.3
root Cargo header counter : 625
```
## Frontières
Aucun changement de comportement pour :
```text
Raw Transaction Ingest Desk runtime / monitoring / IPC / frontend
Config / Transport / Store
Worker / Common RAW
acquisition / replay / repair
Start / Stop / shutdown
politique health / fault
```
## Validation attendue
Le gate opérateur doit notamment confirmer :
```text
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features
```
## Inventaire exact du delta
Ajout :
```text
deltas/0.3.15/pre.012-fix.003.md
```
Modifications :
```text
Cargo.toml
crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs
docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md
```
Suppressions : aucune.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md --> <!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
<!-- version: 24 --> <!-- version: 25 -->
# Validation v0.3.15 — Raw Transaction Ingest Desk # Validation v0.3.15 — Raw Transaction Ingest Desk
@@ -811,3 +811,13 @@ Le gate opérateur de `pre.012-fix.001` compile et teste proprement le Desk, y c
Le fix ajoute uniquement une projection de diagnostic terminale source-neutre et bornée dans `RouteRuntimeLaunch::monitor`. Le log terminal porte désormais l'identité logique sûre de route, `worker_state`, `worker_health`, `worker_activity`, `fault_domain`, `fault_code`, les compteurs `source_failure_total`, `store_failure_total`, `content_conflict_total`, les cardinalités source/gap et les booléens de continuité. Aucun endpoint, credential, source key, WorkerId, signature, payload ou octet RAW n'est journalisé. Le fix ajoute uniquement une projection de diagnostic terminale source-neutre et bornée dans `RouteRuntimeLaunch::monitor`. Le log terminal porte désormais l'identité logique sûre de route, `worker_state`, `worker_health`, `worker_activity`, `fault_domain`, `fault_code`, les compteurs `source_failure_total`, `store_failure_total`, `content_conflict_total`, les cardinalités source/gap et les booléens de continuité. Aucun endpoint, credential, source key, WorkerId, signature, payload ou octet RAW n'est journalisé.
Ce fix ne change volontairement aucune politique fail-closed : il ne transforme pas un `Faulted` en succès et ne suppose pas que l'incident observé est un conflit Store ou une panne source. Le prochain live doit permettre de classer exactement la cause avant toute correction comportementale. Ce fix ne change volontairement aucune politique fail-closed : il ne transforme pas un `Faulted` en succès et ne suppose pas que l'incident observé est un conflit Store ou une panne source. Le prochain live doit permettre de classer exactement la cause avant toute correction comportementale.
### `pre.012-fix.003` — canari terminal compatible Clippy strict
Le gate opérateur de `pre.012-fix.002` confirme que le build normal, les suites Desk/Worker et le live Mainnet sont fonctionnels. Le nouveau diagnostic terminal montre Yellowstone et HTTP Block Polling terminant `Stopped`, `Healthy`, sans `fault_domain`/`fault_code` ni compteur d'erreur ; l'incident `Unhealthy/Faulted` précédent ne se reproduit donc pas dans ce run.
Le seul échec du gate est dans `cargo clippy --workspace --all-targets --all-features -- -D warnings` : le canari `pre_012_fix_002_terminal_fault_logging_keeps_safe_route_identity_and_worker_cause_counters` utilisait deux `assert!(false, ...)` dans ses branches de marqueur absent, ce qui déclenche `clippy::assertions_on_constants`.
Le fix ne modifie aucun code de production. Le canari teste désormais d'abord `Option::is_some()` puis extrait la valeur avec `let-else`; la branche impossible retourne seulement après l'assertion dynamique. Aucun `panic!`, `unreachable!`, `unwrap()` ou `expect()` n'est introduit.
Non-claims : aucune modification du runtime Desk, du monitoring, des routes, de Config, Transport, Store, Worker, Common RAW, acquisition, replay, repair ou politique health/fault.