Files
2026-09-09 22:06:18 +02:00

5.0 KiB

Delta 0.3.12-pre.009 — hardening races/retry/backpressure et no-orphan

Base requise

0.3.12-pre.008-fix.002
workspace.package.version = 0.3.12-pre.8.fix.2

Le gate opérateur communiqué pour cette base est entièrement vert : audits Rust/Markdown, cargo check --workspace, Clippy strict, 388 tests unitaires Transport, 51 public_api Transport, 43 release_completeness Transport, 63 tests unitaires Worker, 9 dependency_boundary, 15 hardening, 9 public_api et 3 release_completeness Worker sans échec.

Objectif

Fermer les races terminales prévues pour pre.009 sans élargir le pipeline :

stop/fault pendant hydration
pending/coalescence abortée
processing frontier conservative
retry ownership Transport-only
duplicate storm bornée
counter exhaustion transactionnelle
no-orphan final

Version

workspace.package.version = 0.3.12-pre.9

No-orphan source/hydration

RawTransactionIngestHydrationCoordinator::abort_all reçoit désormais le reporter de processing frontier. Le cleanup :

abort_all des tâches hydration
join de toutes les tâches hydration
clear de la map pending
pending_signal_count = 0
discard_all_pending de la frontier

discard_all_pending ne convertit jamais un pending en settled. Toute slot qui contenait encore au moins un pending est retirée de la projection conservative, même si un autre signal de cette slot avait déjà été settled.

Cela empêche une frontier terminale d'avancer à travers du travail abandonné lors d'un stop, d'un source fault, d'une erreur hydration ou d'un gap de continuité prouvé.

Arithmetic transactionnelle

Les mutations de RawTransactionIngestProcessingFrontier sont durcies :

observe_pending : overflow vérifié avant mutation de l'entrée
observe_settled : overflow vérifié avant mutation de l'entrée
settle_pending : settled.checked_add avant décrément pending

Un source.frontier_slot_settled_counter_exhausted laisse donc le pending et la projection inchangés ; aucun état partiellement muté n'est publié.

Duplicate storm et backpressure

Le canari source crée une petite borne déterministe et injecte plusieurs signaux identiques :

hydration in-flight -> abort/join puis 0 tâche et 0 pending
3 signaux identiques -> 1 clé coalescée, 3 pending
4e signal -> source.hydration_pending_saturated
aucune tâche HTTP supplémentaire
abort -> 0 pending, 0 tâche, frontier inchangée au dernier niveau sûr

La borne productive existante reste inchangée et aucun canal unbounded n'est ajouté.

Retry ownership

Le Worker conserve exactement un appel get_transaction_observed dans son chemin hydration et n'ajoute aucun sleep/interval de retry. Les retries réseau, backoff, rate-limit et reroutage restent exclusivement dans Transport.

Les tests runtime existants continuent de qualifier Store lent, source failure, stop pendant drain, saturation centrale, drain timeout et counter exhaustion snapshot.

Fichiers modifiés

Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md

Fichier ajouté

deltas/0.3.12/pre.009.md

Fichiers supprimés

aucun

Non-changements

pre.009 n'ajoute ni ne modifie :

API publique Worker
snapshot public
Store/Config/Backfill
Common RAW
Transport replay semantics
from_slot / ReplayInfo
repair/failover
retry Worker
checkpoint durable

Validations exécutées dans l'environnement d'assemblage

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
canaris statiques pre.009 no-orphan/retry ownership
contrôle des versions de fichiers modifiés
contrôle diff exact contre pre.008-fix.002
unzip -t du delta final
reproduction du delta sur la base exacte

cargo, rustc et rustfmt ne sont pas disponibles dans l'environnement d'assemblage. Aucun gate Cargo local n'est revendiqué.

Gate opérateur requis

cargo fmt --all
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
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-onchain-transport-lib
cargo test -p ksp-worker-raw-transaction-ingest-lib
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates

Suite

pre.010 reste consacré à la completeness/security cross-layer : fixtures Legacy/V0, dependency firewall, public API exact, redaction, release completeness et scanners, sans nouveau scope fonctionnel.