# Delta `0.3.11-pre.005` — supervisor privé et ownership des tâches ## Base requise ```text 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 ```text 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` de stop. Le supervisor : ```text 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é ```text 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 ```text 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 ```text deltas/0.3.11/pre.005.md ``` ## Fichiers modifiés ```text 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 ```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 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é ```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 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`.