3.6 KiB
Delta 0.3.14-pre.010-fix.001 — queue de fairness explicitement bornée
Base requise
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 :
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 :
VecDeque::new()
La queue était déjà bornée fonctionnellement par :
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 :
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
deltas/0.3.14/pre.010-fix.001.md
Fichiers modifiés
Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
Fichiers supprimés
aucun
Version Cargo
Le correctif modifie du code Rust production ; conformément aux règles de versioning :
header Cargo.toml : 582 -> 583
workspace.package.version : 0.3.14-pre.10 -> 0.3.14-pre.10.fix.1
Version de fichier :
src/runtime_resources.rs : 39 -> 40
Frontières préservées
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
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 :
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
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
aucune pour ce correctif