Files
khadhroony-solana-project/deltas/0.3.11/pre.004.md
2026-09-08 10:11:07 +02:00

4.8 KiB

Delta 0.3.11-pre.004 — start, handle, lifecycle et terminal Worker

Base requise

0.3.11-pre.003-fix.001
workspace.package.version = 0.3.11-pre.3.fix.1

Le gate opérateur du 8 septembre 2026 est vert après le fix pre.003-fix.001 sur fmt, audits Rust/Markdown, cargo check --workspace, Clippy strict et les dix tests de la crate Worker.

Objectif

Matérialiser uniquement la responsabilité pre.004 du plan 032 : start synchrone sur runtime Tokio caller-owned, handle clonable, stop idempotent, lifecycle générique ksp-worker-api et future terminal boxed, sans ouvrir le supervisor de tâches enfants, l'admission, la canonicalisation, la persistence, les snapshots concrets ou une source live.

Version

identifiant de livraison : 0.3.11-pre.004
workspace.package.version : 0.3.11-pre.4

Contrat public ajouté

ERROR_CODE_RAW_TRANSACTION_INGEST_RUNTIME_INVALID
RawTransactionIngestWorker
RawTransactionIngestHandle
RawTransactionIngestTerminalFuture
RawTransactionIngestWorker::start(settings, Arc<Store>)
RawTransactionIngestHandle::request_stop()
RawTransactionIngestHandle::wait_terminal()

start exige un runtime Tokio courant, vérifie le réseau du Store avant spawn et conserve le Store par Arc sans le fermer ni l'utiliser encore pour une écriture.

request_stop() partage WorkerStopToken et retourne true uniquement lors de la première demande acceptée. Le task racine est réveillé par un watch<bool> privé ; la disparition de tous les handles ferme ce channel et provoque également une terminaison coopérative.

wait_terminal() retourne une future boxed Send. Elle attend un WorkerState terminal puis la fermeture du sender d'état par le task racine ; aucun JoinHandle public n'est nécessaire.

Lifecycle de fondation

Starting -> Running -> Stopping -> Stopped
Starting -> Stopping -> Stopped  si stop immédiat

Les transitions utilisent WorkerLifecycle. Un invariant impossible devient Faulted(worker_raw_transaction_ingest.runtime_invalid) sans payload, worker id, réseau ou erreur externe dans le diagnostic.

Hors scope conservé

JoinSet / tasks enfants
mpsc / admission
canonicalisation common RAW
observation key
persistence Store
snapshots concrets / WorkerSnapshotSource
source live / Transport
Config

Les méthodes de snapshot prévues par la surface finale restent différées à pre.008. pre.005 introduit le supervisor et l'ownership des tâches enfants autour du wake-up de stop déjà minimalement nécessaire ici.

Tests ajoutés ou étendus

Les tests couvrent statiquement ou via harness runtime privé :

runtime Tokio courant obligatoire
network Store mismatch sûr
stop immédiat idempotent
Running -> stop via clone de handle
drop du dernier handle -> sortie du task racine
surface publique start/handle/terminal future
absence de JoinHandle public et du scope pre.005+

Fichiers ajoutés

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

Fichiers modifiés

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

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
scan statique des interdits/scope runtime

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

Gate opérateur demandé

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
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features

Décision

pre.005 reste bloquée jusqu'à validation opérateur verte de cette tranche.

Questions ouvertes

Aucune nouvelle question architecturale. Le supervisor/tasks enfants, l'admission, la persistence et les snapshots restent dans leurs tranches planifiées.