v0.3.14-pre.010-fix.001

This commit is contained in:
2026-09-12 18:11:16 +02:00
parent 8c4b458724
commit c99cb048bf
3 changed files with 148 additions and 4 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml # file: Cargo.toml
# version: 582 # version: 583
[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-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-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.14-pre.10" version = "0.3.14-pre.10.fix.1"
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-worker-raw-transaction-ingest-lib/src/runtime_resources.rs // file: crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
// version: 39 // version: 40
use sha2::Digest; // rust-rules: trait-import use sha2::Digest; // rust-rules: trait-import
@@ -75,7 +75,7 @@ impl RawTransactionIngestFairTurnGate {
active: false, active: false,
last_granted: std::option::Option::None, last_granted: std::option::Option::None,
next_ticket: 1, next_ticket: 1,
waiters: std::collections::VecDeque::new(), waiters: std::collections::VecDeque::with_capacity(max_waiters),
}), }),
}; };
} }

View File

@@ -0,0 +1,144 @@
<!-- file: deltas/0.3.14/pre.010-fix.001.md -->
<!-- version: 1 -->
# Delta `0.3.14-pre.010-fix.001` — queue de fairness explicitement bornée
## Base requise
```text
0.3.14-pre.010
workspace.package.version = 0.3.14-pre.10
deltas/0.3.14/pre.010.md présent
```
## Objectif
Corriger strictement le canari historique `pre.009` en échec après `pre.010`, sans modifier l'algorithme de fairness nominal / repair.
## Défaut observé
Le gate opérateur de `0.3.14-pre.010` valide les audits, `cargo check`, Clippy et les `147` unit tests, puis échoue sur un seul canari :
```text
v0_3_13_pre_009_duplicate_storm_disagreement_and_starvation_guards_are_explicit
pre.009 introduced forbidden unbounded/provider-preference behavior: VecDeque::new()
```
## Cause
`pre.010` a introduit la queue privée de waiters de fairness avec :
```text
VecDeque::new()
```
La queue était déjà bornée fonctionnellement par :
```text
gate.max_waiters == 0 || state.waiters.len() >= gate.max_waiters
```
mais le canari historique protège également l'absence de construction textuellement non bornée.
## Correction
La construction devient explicitement dimensionnée avec la borne existante :
```text
VecDeque::with_capacity(max_waiters)
```
La garde `state.waiters.len() >= gate.max_waiters` reste inchangée et demeure l'autorité qui interdit toute croissance au-delà de la borne.
Aucune capacité supplémentaire n'est réservée fonctionnellement, aucun waiter n'est admis en plus et l'alternance `Nominal / Repair` est inchangée.
## Fichiers ajoutés
```text
deltas/0.3.14/pre.010-fix.001.md
```
## Fichiers modifiés
```text
Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
```
## Fichiers supprimés
```text
aucun
```
## Version Cargo
Le correctif modifie du code Rust production ; conformément aux règles de versioning :
```text
header Cargo.toml : 582 -> 583
workspace.package.version : 0.3.14-pre.10 -> 0.3.14-pre.10.fix.1
```
Version de fichier :
```text
src/runtime_resources.rs : 39 -> 40
```
## Frontières préservées
```text
aucune seconde queue d'admission ou de persistence
aucun second registre d'hydration
aucune nouvelle semaphore
aucune capacité repair réservée
burst repair = 1 inchangé
fanout bloc repair <= 4 inchangé
fenêtre discovery <= 512 inchangée
aucun changement de TargetCoverage ou continuity ledger
aucun changement de health policy
aucun respawn Worker
aucun changement Transport
aucun Job Backfill
aucun backend Store physique
aucune croissance de surface publique
```
## Validations exécutées
```text
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
vérification ciblée de l'absence de VecDeque::new() dans le code Worker contrôlé par le canari
contrôle du diff exact
contrôle d'inventaire ZIP
unzip -t
réapplication du delta sur la base pre.010 et comparaison byte-à-byte
```
## Validations non exécutées
Le toolchain Rust/Cargo n'est pas disponible dans le sandbox de préparation. Le gate opérateur reste requis :
```text
cargo fmt --all
cargo fmt --all -- --check
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features
```
## Décisions prises
```text
rendre la borne existante explicite à la construction plutôt que relâcher le canari
ne pas ajouter de #[allow(...)]
ne pas modifier la fairness, les quotas ni les pipelines existants
```
## Questions ouvertes
```text
aucune pour ce correctif
```