Files
2026-09-08 12:28:51 +02:00

5.7 KiB

Delta 0.3.11-pre.008 — snapshots latest-value et projection Worker API

Base requise

0.3.11-pre.007
workspace.package.version = 0.3.11-pre.7

Le gate opérateur du 8 septembre 2026 est vert sur fmt, audits Rust/Markdown, cargo check --workspace, Clippy strict, 31 tests de la crate Worker et les doc-tests. Aucun cargo tree intermédiaire n'était requis : pre.007 n'avait modifié aucune dépendance ni feature.

Objectif

Matérialiser uniquement la responsabilité pre.008 du plan 032 : snapshot concret latest-value, compteurs checked, projection directe vers ksp-worker-api::WorkerSnapshotSource, coalescence des listeners et terminal retenu. Aucun hardening timeout/abort et aucune source réseau.

Version

identifiant de livraison : 0.3.11-pre.008
workspace.package.version : 0.3.11-pre.8

Snapshot concret

La crate expose :

RawTransactionIngestSnapshot
RawTransactionIngestSnapshotFuture
RawTransactionIngestSnapshotSource

Le snapshot contient uniquement la projection WorkerSnapshot, les capacités/profondeurs techniques bornées et les compteurs sûrs prévus par le plan.

Un seul flux latest-value

Un unique :

tokio::sync::watch::channel<RawTransactionIngestSnapshot>

porte l'état observable du run. Le watch terminal spécialisé des tranches précédentes disparaît : wait_terminal(), snapshot_source() et worker_snapshot_source() lisent tous ce même flux.

RawTransactionIngestSnapshotSource implémente directement ksp_worker_api::WorkerSnapshotSource. La sequence WorkerSnapshotSequence est donc identique pour la vue concrète et la projection commune.

Compteurs checked

Les compteurs u64 effectivement incrémentés dans cette tranche utilisent checked_add(1). Aucun wrap silencieux n'est admis. Le nouveau code public est :

worker_raw_transaction_ingest.counter_exhausted

Les compteurs sont mis à jour au point d'ownership du supervisor : dequeue/canonicalisation et récolte de persistence. admission_queue_depth provient directement du receiver mpsc borné ; in_flight_persistence provient du JoinSet privé existant.

source_failure_total et backpressure_wait_total font partie du snapshot sûr mais restent à zéro en pre.008; leur comportement effectif appartient à pre.009.

Projection common Worker

Mapping de fondation :

Starting                         -> health Unknown
Running                          -> health Healthy
Stopping / Stopped               -> conserve le dernier health non terminal
Faulted                          -> health Unhealthy
queue > 0 ou persistence > 0     -> activity Active
sinon Running/Stopping/terminal  -> activity Idle

La state machine reste celle de ksp-worker-api::WorkerLifecycle.

Tests ajoutés ou étendus

snapshot initial exact
projection common/concrete même sequence
counter exhaustion stable sans wrap
listener lent coalescé vers la dernière valeur
terminal latest-value retenu après fermeture publisher
surface publique snapshot_source/worker_snapshot_source
WorkerSnapshotSource Send + Sync
pipeline runtime réussi -> counters exacts
Store failure -> health Unhealthy + store_failure_total
absence de watch terminal séparé
absence de nouveau dependency edge

Fichiers ajoutés

crates/ksp-worker-raw-transaction-ingest-lib/src/snapshot.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/snapshot.rs
deltas/0.3.11/pre.008.md

Fichiers modifiés

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/tests/dependency_boundary.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime.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.

Hors scope conservé

source live / Transport
Config
backend Store direct
source_failed public
source failure behavior
backpressure wait instrumentation productive
drain timeout / abort forcé
fault/stop precedence finalisée
retry / reconnect / gap repair

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

General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
Markdown table audit: clean

scan production : aucun unwrap, expect, panic, unbounded_channel
scan scope : aucun backend Store direct, aucun Transport, aucune nouvelle dépendance

L'environnement d'assemblage ne fournit ni cargo, ni rustc, ni rustfmt. Aucun gate Cargo de pre.008 n'est déclaré PASS localement.

Gate opérateur demandé

Aucune dépendance ni feature n'a changé dans cette tranche ; aucun cargo tree intermédiaire n'est 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-worker-raw-transaction-ingest-lib

Décision

pre.009 reste bloquée jusqu'à validation opérateur verte des snapshots common/concrete, des compteurs checked et du terminal latest-value retenu.

Questions ouvertes

Aucune nouvelle question architecturale. Le hardening shutdown/backpressure/fault races reste dans pre.009.