153 lines
5.0 KiB
Markdown
153 lines
5.0 KiB
Markdown
<!-- file: deltas/0.3.12/pre.009.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.3.12-pre.009` — hardening races/retry/backpressure et no-orphan
|
|
|
|
## Base requise
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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é
|
|
|
|
```text
|
|
deltas/0.3.12/pre.009.md
|
|
```
|
|
|
|
## Fichiers supprimés
|
|
|
|
```text
|
|
aucun
|
|
```
|
|
|
|
## Non-changements
|
|
|
|
`pre.009` n'ajoute ni ne modifie :
|
|
|
|
```text
|
|
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
|
|
|
|
```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
|
|
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
|
|
|
|
```bash
|
|
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.
|