0.3.15-pre.012-fix.003
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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 [
|
||||||
|
|||||||
70
deltas/0.3.15/pre.012-fix.003.md
Normal file
70
deltas/0.3.15/pre.012-fix.003.md
Normal 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.
|
||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user