v0.3.11-pre.009
This commit is contained in:
135
deltas/0.3.11/pre.009.md
Normal file
135
deltas/0.3.11/pre.009.md
Normal file
@@ -0,0 +1,135 @@
|
||||
<!-- file: deltas/0.3.11/pre.009.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.11-pre.009` — hardening shutdown, backpressure et races fault/stop
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
0.3.11-pre.008-fix.001
|
||||
workspace.package.version = 0.3.11-pre.8.fix.1
|
||||
```
|
||||
|
||||
Le gate opérateur du 8 septembre 2026 est vert sur `fmt`, audits Rust/Markdown, `cargo check --workspace`, Clippy strict, 38 tests de la crate Worker et les doc-tests. Aucune dépendance/feature n'ayant changé, aucun `cargo tree` intermédiaire n'était requis.
|
||||
|
||||
## Objectif
|
||||
|
||||
Fermer uniquement le hardening `pre.009` du plan `032` : faults source sûrs, saturation observable, ordering stop/fault déterministe, deadline de drain, abort+join au timeout et absence de tâches orphelines. Aucune source live n'est introduite.
|
||||
|
||||
## Version
|
||||
|
||||
```text
|
||||
identifiant de livraison : 0.3.11-pre.009
|
||||
workspace.package.version : 0.3.11-pre.9
|
||||
```
|
||||
|
||||
## Faults source
|
||||
|
||||
Les tâches source privées retournent `ksp_core_lib::Result<()>`. Une erreur source ou un `JoinError` devient :
|
||||
|
||||
```text
|
||||
worker_raw_transaction_ingest.source_failed
|
||||
```
|
||||
|
||||
Le détail distant/provider n'est pas propagé et `source_failure_total` est incrémenté via checked-add.
|
||||
|
||||
## Shutdown borné
|
||||
|
||||
Le drain complet est enveloppé par `shutdown_drain_timeout`. En cas de timeout :
|
||||
|
||||
```text
|
||||
admission.close()
|
||||
persistence.abort_all()
|
||||
sources.abort_all()
|
||||
join complet des persistences
|
||||
join complet des sources
|
||||
Faulted(worker_raw_transaction_ingest.drain_timeout)
|
||||
```
|
||||
|
||||
Le terminal n'est donc jamais publié avant la récolte de toutes les tâches possédées.
|
||||
|
||||
## Ordering stop/fault
|
||||
|
||||
Le stop reste prioritaire dans le `select!`, mais un Store fault découvert pendant le drain n'est pas masqué. Un fault terminal déjà décidé n'est pas remplacé par un stop tardif. Le timeout de drain prévaut lorsqu'il empêche la clôture coopérative.
|
||||
|
||||
## Backpressure source-neutral
|
||||
|
||||
L'admission conserve une unique queue `mpsc` bornée. Le dequeue constate si cette queue était pleine à sa capacité configurée et incrémente `backpressure_wait_total`. Aucun drop, aucune queue secondaire et aucun `unbounded_channel` ne sont ajoutés.
|
||||
|
||||
## Tests ajoutés ou étendus
|
||||
|
||||
```text
|
||||
source failure terminal + compteur
|
||||
late stop ne remplace pas source_failed
|
||||
stop puis Store fault pendant drain
|
||||
saturation capacity=1 sans drop
|
||||
backpressure_wait_total observable
|
||||
drain timeout + abort/join des sources et persistences
|
||||
aucune tâche active après terminal timeout
|
||||
projection snapshot source/backpressure
|
||||
error codes source_failed/drain_timeout publics
|
||||
dependency firewall inchangé
|
||||
```
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.11/pre.009.md
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/admission.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/error.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/lib.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/snapshot.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/admission.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/snapshot.rs
|
||||
docs/plans/032-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION_PLAN.md
|
||||
docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
Aucun.
|
||||
|
||||
## Dépendances
|
||||
|
||||
Aucune dépendance ni feature n'est ajoutée, supprimée ou modifiée. Le `Cargo.toml` de la crate Worker reste identique à la base.
|
||||
|
||||
## 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
|
||||
scan statique des frontières runtime/dependencies
|
||||
```
|
||||
|
||||
L'environnement d'assemblage ne fournit ni `cargo`, ni `rustc`, ni `rustfmt`. Aucun gate Cargo de `pre.009` n'est déclaré PASS localement.
|
||||
|
||||
## Gate opérateur demandé
|
||||
|
||||
Aucune dépendance ni feature n'ayant changé, aucun `cargo tree` intermédiaire n'est 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-worker-raw-transaction-ingest-lib
|
||||
```
|
||||
|
||||
## Décision
|
||||
|
||||
`pre.010` reste bloquée jusqu'à validation opérateur verte du hardening shutdown/backpressure/fault races.
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
Aucune nouvelle question architecturale. Les sources live restent explicitement hors scope de `0.3.11`.
|
||||
Reference in New Issue
Block a user