v0.3.11-pre.009
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md -->
|
||||
<!-- version: 11 -->
|
||||
<!-- version: 12 -->
|
||||
|
||||
# Validation v0.3.11 — fondation runtime du Worker RawTransaction ingest
|
||||
|
||||
@@ -1301,3 +1301,106 @@ cargo test -p ksp-worker-raw-transaction-ingest-lib
|
||||
|
||||
Critère de passage : snapshots common/concrete latest-value, compteurs checked, terminal retenu et absence de nouveau boundary crossing sont verts.
|
||||
|
||||
## 20. `pre.009` — hardening shutdown/backpressure/fault races
|
||||
|
||||
### 20.1 Clôture opérateur de `pre.008-fix.001`
|
||||
|
||||
Le gate communiqué le 8 septembre 2026 est vert :
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
Markdown table audit: clean (340 table(s), 785 file(s))
|
||||
cargo check --workspace: PASS
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings: PASS
|
||||
29 unit tests: PASS
|
||||
3 dependency-boundary tests: PASS
|
||||
6 public API tests: PASS
|
||||
doc-tests: PASS
|
||||
```
|
||||
|
||||
Aucune dépendance ni feature n'avait changé ; aucun `cargo tree` intermédiaire n'était requis.
|
||||
|
||||
### 20.2 Classification des faults source
|
||||
|
||||
Les tâches source privées sont possédées par :
|
||||
|
||||
```text
|
||||
tokio::task::JoinSet<ksp_core_lib::Result<()>>
|
||||
```
|
||||
|
||||
Une `Err` source ou un `JoinError` est réduite à :
|
||||
|
||||
```text
|
||||
worker_raw_transaction_ingest.source_failed
|
||||
```
|
||||
|
||||
Le texte de l'erreur source n'est jamais recopié. `source_failure_total` est incrémenté avec la même discipline checked que les autres compteurs.
|
||||
|
||||
### 20.3 Deadline de drain et absence d'orphelins
|
||||
|
||||
Le drain complet est borné par `shutdown_drain_timeout` via `tokio::time::timeout`. Si la deadline expire :
|
||||
|
||||
```text
|
||||
fermeture admission
|
||||
abort_all des persistences
|
||||
abort_all des tâches source
|
||||
join complet des deux JoinSet
|
||||
Faulted(worker_raw_transaction_ingest.drain_timeout)
|
||||
```
|
||||
|
||||
Aucun terminal n'est publié avant la récolte des tâches possédées.
|
||||
|
||||
### 20.4 Priorité stop/fault
|
||||
|
||||
Le stop reste la branche prioritaire du `select!`. Cette priorité n'efface cependant pas un Store fault découvert pendant le drain déjà engagé. Réciproquement, un fault terminal décidé avant un stop tardif demeure le terminal retenu. Le timeout de drain prévaut lorsqu'il empêche la fermeture coopérative complète.
|
||||
|
||||
### 20.5 Saturation et backpressure
|
||||
|
||||
La queue d'admission demeure le `mpsc` borné de `pre.006`. Le supervisor observe, avant dequeue, si la queue est à sa capacité configurée ; cette observation source-neutral incrémente `backpressure_wait_total`. Aucun élément n'est droppé, aucune seconde queue et aucun `unbounded_channel` ne sont introduits.
|
||||
|
||||
### 20.6 Preuves ajoutées
|
||||
|
||||
Les tests `pre.009` couvrent :
|
||||
|
||||
```text
|
||||
source failure -> source_failed + source_failure_total
|
||||
stop tardif ne remplace pas source_failed
|
||||
stop avant Store fault -> Store fault terminal après drain
|
||||
queue capacity=1 + persistence concurrency=1 -> saturation observable sans drop
|
||||
drain timeout -> abort + join source et persistence
|
||||
aucune tâche source/persistence active après terminal timeout
|
||||
projection snapshot conserve les compteurs source/backpressure
|
||||
error codes source_failed/drain_timeout publics et stables
|
||||
aucun nouvel edge de dépendance
|
||||
```
|
||||
|
||||
### 20.7 Hors scope conservé
|
||||
|
||||
`pre.009` n'introduit toujours aucun :
|
||||
|
||||
```text
|
||||
source live
|
||||
Transport
|
||||
Config
|
||||
backend Store direct
|
||||
retry / reconnect
|
||||
gap repair / replay live
|
||||
provider capability public
|
||||
```
|
||||
|
||||
### 20.8 Gate opérateur demandé pour `pre.009`
|
||||
|
||||
Aucune dépendance ni feature n'est modifiée ; 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
|
||||
```
|
||||
|
||||
Critère de passage : races stop/fault déterministes, timeout borné sans tâche orpheline, saturation observable sans drop et frontières de dépendances inchangées.
|
||||
|
||||
Reference in New Issue
Block a user