4.2 KiB
Delta 0.3.11-pre.005 — supervisor privé et ownership des tâches
Base requise
0.3.11-pre.004
workspace.package.version = 0.3.11-pre.4
Le gate opérateur du 8 septembre 2026 est vert sur fmt, audits Rust/Markdown, cargo check --workspace, Clippy strict, les 16 tests de la crate Worker, doc-tests et les arbres Cargo normal/features.
Objectif
Matérialiser uniquement la responsabilité pre.005 du plan 032 : supervisor privé, JoinSet privé, ownership et join des tâches enfants, intégration du stop au seam source déterministe et preuve qu'aucune tâche enfant coopérative ne survit au terminal. Aucun admission mpsc, aucune canonicalisation RAW et aucune persistence Store réelle.
Version
identifiant de livraison : 0.3.11-pre.005
workspace.package.version : 0.3.11-pre.5
Runtime privé ajouté
Le task racine devient le supervisor du run. Il possède un tokio::task::JoinSet<()> privé et un seam privé de spawn de tâches source.
La production appelle ce seam sans source. Les tests injectent des tâches déterministes qui reçoivent un clone du watch<bool> de stop.
Le supervisor :
reap des enfants terminés via join_next()
stop prioritaire via select! biased
join de tous les enfants restants après stop/fermeture du contrôle
Stopped publié uniquement après join complet
JoinError -> supervision non clean ; Faulted à la fermeture de supervision
Aucun JoinHandle ou JoinSet n'est ajouté à la surface publique.
Arrêt coopératif
Le timeout de drain configuré existe déjà dans les settings mais n'est pas encore appliqué ici. pre.005 attend coopérativement les enfants ; le timeout, abort_all et les races stop/fault sont réservés au hardening pre.009.
Hors scope conservé
mpsc / admission
PrivateRawTransactionIngress
canonicalisation common RAW
observation key
persistence Store
snapshots concrets / WorkerSnapshotSource
source live / Transport
Config
abort/timeout de drain
Tests ajoutés ou étendus
supervisor joint trois tâches source coopératives avant Stopped
compteur d'enfants actifs == 0 au terminal
reap d'une source terminée pendant Running
join d'une source encore active lors du stop
canary statique : JoinSet présent mais privé
canary statique : aucun scope pre.006+ ouvert
Fichiers ajoutés
deltas/0.3.11/pre.005.md
Fichiers modifiés
Cargo.toml
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/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.
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
Markdown table audit: clean (340 table(s), 780 file(s))
L'environnement d'assemblage ne fournit ni cargo, ni rustc, ni rustfmt. Aucun gate Cargo de pre.005 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.006 reste bloquée jusqu'à validation opérateur verte de cette tranche.
Questions ouvertes
Aucune nouvelle question architecturale. L'admission bornée et la canonicalisation common RAW restent dans pre.006, la persistence dans pre.007, les snapshots dans pre.008 et le drain forcé/races dans pre.009.